文章目录
示例概述
我们将创建一个JavaFX应用程序,该应用程序连接到MySQL数据库,查询某个表中的数据,并将结果显示在一个ListView
中。我们将使用以下工具和技术:
- JavaFX
- MySQL
- JDBC
示例代码
导入必要的包
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
定义主类和主方法
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) {
// 创建UI组件
ListView<String> listView = new ListView<>();
VBox vBox = new VBox(listView);
Scene scene = new Scene(vBox, 300, 250);
// 设置舞台
primaryStage.setTitle("JavaFX MySQL Connection Example");
primaryStage.setScene(scene);
primaryStage.show();
// 连接数据库并获取数据
connectToDatabase(listView);
}
private void connectToDatabase(ListView<String> listView) {
String url = "jdbc:mysql://localhost:3306/your_database_name";
String user = "your_username";
String password = "your_password";
// 创建一个可观察的列表来存储查询结果
ObservableList<String> items = FXCollections.observableArrayList();
try {
// 加载MySQL JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println("Database connection established.");
// 创建Statement对象
Statement stmt = conn.createStatement();
String query = "SELECT * FROM your_table_name";
// 执行查询
ResultSet rs = stmt.executeQuery(query);
// 处理结果集
while (rs.next()) {
// 假设表中有名为"column_name"的列
String data = rs.getString("column_name");
items.add(data); // 将数据添加到可观察的列表中
}
// 更新ListView的项列表
listView.setItems(items);
// 关闭资源
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
详细解释
导入必要的包
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
javafx.application.Application
:JavaFX应用程序的基类。javafx.collections.FXCollections
和ObservableList
:用于创建可观察的列表,这是JavaFX控件(如ListView
)所需的数据结构。javafx.scene.Scene
:表示JavaFX场景。javafx.scene.control.ListView
:用于显示列表数据的控件。javafx.scene.layout.VBox
:垂直布局容器。javafx.stage.Stage
:表示JavaFX舞台。java.sql.*
:用于数据库操作的类和接口。
定义主类和主方法
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) {
// 创建UI组件
ListView<String> listView = new ListView<>();
VBox vBox = new VBox(listView);
Scene scene = new Scene(vBox, 300, 250);
// 设置舞台
primaryStage.setTitle("JavaFX MySQL Connection Example");
primaryStage.setScene(scene);
primaryStage.show();
// 连接数据库并获取数据
connectToDatabase(listView);
}
public static void main(String[] args) {
launch(args);
}
}
MainApp
类继承自Application
,是JavaFX应用程序的入口点。start
方法是JavaFX应用程序的启动方法,负责创建和显示用户界面。main
方法是JavaFX应用程序的入口点,调用launch
方法启动应用程序。
连接数据库并处理查询结果
private void connectToDatabase(ListView<String> listView) {
String url = "jdbc:mysql://localhost:3306/your_database_name";
String user = "your_username";
String password = "your_password";
// 创建一个可观察的列表来存储查询结果
ObservableList<String> items = FXCollections.observableArrayList();
try {
// 加载MySQL JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println("Database connection established.");
// 创建Statement对象
Statement stmt = conn.createStatement();
String query = "SELECT * FROM your_table_name";
// 执行查询
ResultSet rs = stmt.executeQuery(query);
// 处理结果集
while (rs.next()) {
// 假设表中有名为"column_name"的列
String data = rs.getString("column_name");
items.add(data); // 将数据添加到可观察的列表中
}
// 更新ListView的项列表
listView.setItems(items);
// 关闭资源
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
- 加载MySQL JDBC驱动:使用
Class.forName
加载MySQL JDBC驱动。 - 建立数据库连接:使用
DriverManager.getConnection
建立数据库连接。 - 创建Statement对象:使用
Connection.createStatement
创建Statement
对象。 - 执行查询:使用
Statement.executeQuery
执行SQL查询,返回ResultSet
对象。 - 处理结果集:使用
ResultSet.next
遍历结果集中的每一行,使用ResultSet.getString
获取特定列的数据,并将其添加到可观察的列表中。 - 更新ListView的项列表:使用
ListView.setItems
方法将可观察的列表设置为ListView
的项列表。 - 关闭资源:关闭
ResultSet
、Statement
和Connection
对象,以释放资源。
运行效果
当你编译并运行上述代码时,将会出现一个JavaFX窗口,窗口中包含一个ListView
控件,显示从MySQL数据库中查询到的数据。具体效果如下:
- 启动应用程序:程序启动后,会显示一个标题为“JavaFX MySQL Connection Example”的窗口。
- 显示数据:
ListView
控件中会列出从数据库表中查询到的所有数据项。 - 控制台输出:如果连接成功,控制台会输出“Database connection established.”。
示例数据库表结构
假设你的数据库表结构如下:
CREATE TABLE your_table_name (
id INT AUTO_INCREMENT PRIMARY KEY,
column_name VARCHAR(255)
);
INSERT INTO your_table_name (column_name) VALUES ('Item 1');
INSERT INTO your_table_name (column_name) VALUES ('Item 2');
INSERT INTO your_table_name (column_name) VALUES ('Item 3');
注意事项
- 异常处理:确保所有的数据库操作都包含适当的异常处理机制,以便捕获并处理可能发生的错误。
- 资源管理:每次操作完成后都要关闭
ResultSet
、Statement
和Connection
对象,以避免资源泄漏。 - 线程安全:如果在多线程环境中使用数据库连接,请确保线程安全。可以考虑使用连接池来管理数据库连接。
- 性能优化:对于大量数据的查询,考虑使用分页或其他优化技术来提高性能。
- UI更新:在JavaFX中,更新UI组件的操作必须在JavaFX应用程序线程中进行。如果数据库操作是在后台线程中进行的,可以使用
Platform.runLater
方法将UI更新操作调度到JavaFX应用程序线程。