如何用数据库数据填充TableView

编程入门 行业动态 更新时间:2024-10-12 20:28:01
本文介绍了如何用数据库数据填充TableView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我一直在尝试使用从数据库中查询的数据加载TableView,但似乎无法使其工作。

I've been trying to load a TableView with data queried from a database, but can't seem to get it to work.

这是我的第一次尝试在尝试使用数据库查询项填充数据库时,如果我的代码看起来很糟糕并且远远不够好。

This is my first attempt at trying to fill up a database with database query items, in case my code seems mungled and far from good.

FXML是通过JavaFx SceneBuilder完成的。

The FXML was done via JavaFx SceneBuilder.

这是数据库查询类:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.TableView; public class StudentInfo { static String JDBC_DRIVER = "org.h2.Driver"; static String DB_URL = "jdbc:h2:file:C:/WAKILI/WAKILIdb"; // Database credentials static final String USER = "sa"; static final String PASS = ""; public static Connection conn = null; @FXML private TableView<StudentInfo> lovelyStudents; private ObservableList data; // Public static ObservableList<COA> getAllCOA(){ public void getAllstudentInfo() { Statement st = null; ResultSet rs; String driver = "org.h2.Driver"; try { Class.forName(driver); conn = DriverManager.getConnection(DB_URL, USER, PASS); st = conn.createStatement(); String recordQuery = ("SELECT id, KIWI FROM KIWI"); rs = st.executeQuery(recordQuery); while (rs.next()) { ObservableList row = FXCollections.observableArrayList(); for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { row.add(rs.getString(i)); System.out.println(row); } data.add(row); } lovelyStudents.setItems(data); } catch (ClassNotFoundException | SQLException ex) { // CATCH SOMETHING } } }

这是通过JavaFx场景构建器生成的FXML脚本:

This is the FXML script generated via JavaFx scene builder:

<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="700.0" xmlns:fx="javafx/fxml" fx:controller="wakiliproject.SampleController"> <children> <TableView prefHeight="400.0" prefWidth="700.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <columns> <TableColumn prefWidth="75.0" text="Column X" /> </columns> </TableView> </children> </AnchorPane>

推荐答案

以下是填充数据的最佳解决方案tableView来自数据库。

Here is the best solution for the filling data to the tableView From the database.

import java.sql.Connection; import java.sql.ResultSet; import javafx.application.Application; import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn.CellDataFeatures; import javafx.scene.control.TableView; import javafx.stage.Stage; import javafx.util.Callback; /** * * @author Narayan */ public class DynamicTable extends Application{ //TABLE VIEW AND DATA private ObservableList<ObservableList> data; private TableView tableview; //MAIN EXECUTOR public static void main(String[] args) { launch(args); } //CONNECTION DATABASE public void buildData(){ Connection c ; data = FXCollections.observableArrayList(); try{ c = DBConnect.connect(); //SQL FOR SELECTING ALL OF CUSTOMER String SQL = "SELECT * from CUSTOMer"; //ResultSet ResultSet rs = c.createStatement().executeQuery(SQL); /********************************** * TABLE COLUMN ADDED DYNAMICALLY * **********************************/ for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){ //We are using non property style for making dynamic table final int j = i; TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i+1)); col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){ public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { return new SimpleStringProperty(param.getValue().get(j).toString()); } }); tableview.getColumns().addAll(col); System.out.println("Column ["+i+"] "); } /******************************** * Data added to ObservableList * ********************************/ while(rs.next()){ //Iterate Row ObservableList<String> row = FXCollections.observableArrayList(); for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){ //Iterate Column row.add(rs.getString(i)); } System.out.println("Row [1] added "+row ); data.add(row); } //FINALLY ADDED TO TableView tableview.setItems(data); }catch(Exception e){ e.printStackTrace(); System.out.println("Error on Building Data"); } } @Override public void start(Stage stage) throws Exception { //TableView tableview = new TableView(); buildData(); //Main Scene Scene scene = new Scene(tableview); stage.setScene(scene); stage.show(); } }

这是参考

谢谢..

更多推荐

如何用数据库数据填充TableView

本文发布于:2023-10-26 17:45:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1530881.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何用   数据库   数据   TableView

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!