JavaFX将数据库数据输出到TableView表格中

tech2026-06-17  2

一 、创建Fxml文件

用Javafx Scene Builder 编辑页面,创建tableview(表格)和tablecolum(表格中的列),并为其设置fxid;

二、生成fxml文件的控制类;

三、创建数据库的连接类(使用JDBC驱动);

Connect.java

import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class Connect { // 连接数据库url static String url; // 创建Properties对象 static Properties info = new Properties(); // 驱动程序加载 static { // 获得属性文件输入流 InputStream input = Connect.class.getResourceAsStream("config.properties"); try { // 加载属性文件内容到Properties对象 info.load(input); // 从属性文件中取出url url = info.getProperty("url"); // 从属性文件中取出driver String driverClassName = info.getProperty("driver"); Class.forName(driverClassName); System.out.println("驱动程序加载成功..."); } catch (ClassNotFoundException e) { System.out.println("驱动程序加载失败..."); } catch (IOException e) { System.out.println("加载属性文件失败..."); } } // 获得数据库连接 public static Connection getConnection() { // 创建数据库连接 Connection conn = null; try { conn = DriverManager.getConnection(url, info); // System.out.println("数据库连接成功!"); } catch (SQLException e) { System.out.println("数据库连接失败!"); System.out.println(url); System.out.println(info); } return conn; } }

四、控制类需继承抽象类initable,并实现为实现的抽象方法;

五、获取数据库连接:

Connection conn = Connect.getConnection();

写数据库查询语句:

String sql="select * from Test";

使用prepareStatement  prep = new prepareStatement(sql);

执行数据库语句。

(1)如果执行的数据库语句是查询语句,则会返回查询结果

  使用 Resultset res = prep.executeQuery()来执行查询并将查询结果存入res中

(2)如果执行的数据库语句是非查询语句(如插入、删除等),则没有返回结果

  使用 Resultset res = prep.execute()来执行。

用错会报错。

六、创建ObservableList<Data> cellData = FxCollections.observableArraylist();

Data 类是需要插入tableview表格的数据类型

如插入表格的每行数据都为一个字符串,则Data类应定义变量:

SimpleStringProperty str1 = new SimpleStringProperty();

并为变量创建访问器(getStr)和修改器(setStr)

并创建这个类的构造方法Data(string)。

七、利用cellData.add(new Data(string))方法填充数据进入cellData中。

  tableview.setCellvalueFactory(cellData->cellData.getvalue().getStr())

  最后使用tableview.SetItem(cellData)绑定数据给表格即可

 

首先需要一个Model类来构建数据结构和方法,然后创建一个Observablelist来与TableView绑定,Observablelist中存储Model类的对象。

下面是例子:

Model class

import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; public Person { public Person(String id, String name){ this.setId(id); this.setName(name); } private StringProperty id; //也可以在这里直接new public void setId(String value){ idProperty().set(value);} public String getId(){ return idProperty().get(); } public StringProperty idProperty(){ if(id == null) id = new SimpleStringProperty(this, "id"); return id; } private StringProperty name; public void setName(String value){ nameProperty().set(value);} public String getName(){ return idProperty().get(); } public StringProperty nameProperty(){ if(name == null) name = new SimpleStringProperty(this, "name"); return name; } }

所有属性使用对应的Property属性,每个属性对应三个函数:get(), set(), Property(),其中Property方法用于获得变量。 除了上面的写法,也可以声明变量的时候直接new,这样Property()方法只需要return。

Controller class

@FXML private TableView<Person> personTable; @FXML private TableColumn<Person, String> idColumn; @FXML private TableColumn<Person, String> nameColumn; //用于保存数据,<>中为上面Model类的类名 private ObservableList<Person> personData = FXCollections.observableArrayList(); /** * 在fxml文件完成载入时自动被调用 */ @FXML private void initialize(){ idColumn.setCellValueFactory(cellData -> cellData.getValue().idProperty()); nameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty()); //绑定数据到TableView personTable.setItems(personData); //添加数据到personData,TableView会自动更新 personData.add(new Person("007", "爱谁谁")); }
最新回复(0)