在 JavaFX 中使用数据库填充表视图
Posted
技术标签:
【中文标题】在 JavaFX 中使用数据库填充表视图【英文标题】:Populate a tableview using database in JavaFX 【发布时间】:2013-09-01 02:31:13 【问题描述】:我开始学习 javaFX,我需要用我的数据库中的数据填充一个表。我在网上阅读了很多代码,但我没有找到我想要的东西。我读了this,但我不知道如何实现最后一个功能。我阅读了一些其他代码来做到这一点,到目前为止,这是我的一些代码:
@FXML private TableView<User> table;
@FXML private TableColumn<User, String> nameCol;
@FXML private TableColumn<User, String> emailCol;
private ObservableList<User> data;
public void initialize(URL location, ResourceBundle resources)
nameCol.setCellValueFactory(new PropertyValueFactory(“name”));
emailCol.setCellValueFactory(new PropertyValueFactory(“email”));
buildData();
public void buildData()
Connection connect = new Connection();
Statement st = connect.Connect();
data = FXCollections.observableArrayList();
try
ResultSet rs = st.executeQuery("SELECT * FROM USER");
while (rs.next())
ObservableList<User> row = FXCollections.observableArrayList();
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++)
row.add(rs.getString(i));
System.out.println(row);
data.add(pol);
tabla.setItems(data);
catch (SQLException ex)
JOptionPane.showMessageDialog(null, ex);
希望你能帮到我
【问题讨论】:
这是sample,其中fetches names from a Database into a ListView。从数据库中填充 TableView 的概念类似。 TableView tutorial 可能会有所帮助,如果您还没有研究过它)。 Display Items from a Database in a JavaFX TableView的可能重复 【参考方案1】:我相信这会对你有所帮助:
public class DBClass
public Connection getConnection() throws ClassNotFoundException, SQLException
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://192.168.0.1:3306/dbname","mysqluser","mysqluserpwd");
在控制器类中执行以下操作:
@FXML
void initialize()
assert tableview != null : "fx:id=\"tableview\" was not injected: check your FXML file 'UserMaster.fxml'.";
colUserName.setCellValueFactory(
new PropertyValueFactory<Usermaster,String>("userName"));
colPassword.setCellValueFactory(
new PropertyValueFactory<Usermaster,String>("userPassword"));
colUserType.setCellValueFactory(
new PropertyValueFactory<Usermaster,String>("userType"));
colPhoto.setCellValueFactory(
new PropertyValueFactory<Object,ImageView>("userPhoto"));
objDbClass = new DBClass();
try
con = objDbClass.getConnection();
buildData();
catch(ClassNotFoundException ce)
logger.info(ce.toString());
catch(SQLException ce)
logger.info(ce.toString());
private ObservableList<Usermaster> data;
public void buildData()
data = FXCollections.observableArrayList();
try
String SQL = "Select * from usermaster Order By UserName";
ResultSet rs = con.createStatement().executeQuery(SQL);
while(rs.next())
Usermaster cm = new Usermaster();
cm.userId.set(rs.getInt("UserId"));
Image img = new Image("tailoring/UserPhoto/User"+cm.getUserId().toString()+".jpg");
ImageView mv = new ImageView();
mv.setImage(img);
mv.setFitWidth(70);
mv.setFitHeight(80);
cm.userPhoto.set(mv);
cm.userName.set(rs.getString("UserName"));
cm.userPassword.set(rs.getString("UserPassword"));
cm.userType.set(rs.getString("UserType"));
data.add(cm);
tableview.setItems(data);
catch(Exception e)
e.printStackTrace();
System.out.println("Error on Building Data");
并为每个要使用 TableView 操作的实体(表)创建一个单独的 java 文件的 POJO
public class Usermaster
public SimpleIntegerProperty userId = new SimpleIntegerProperty();
public ObjectProperty userPhoto = new SimpleObjectProperty();
public SimpleStringProperty userName = new SimpleStringProperty();
public SimpleStringProperty userPassword = new SimpleStringProperty();
public SimpleStringProperty userType = new SimpleStringProperty();
public SimpleStringProperty encPass = new SimpleStringProperty();
public SimpleStringProperty updt = new SimpleStringProperty();
public SimpleStringProperty uptm = new SimpleStringProperty();
public Integer getUserId()
return userId.get();
public Object getUserPhoto()
return userPhoto.get();
public String getUserName()
return userName.get();
public String getUserPassword()
return userPassword.get();
public String getUserType()
return userType.get();
public String getEncPass()
return encPass.get();
public String getUpdt()
return updt.get();
public String getUptm()
return uptm.get();
我已经测试了这个程序,它运行良好。
【讨论】:
这里只是注意一下,这不是创建模型类Usermaster
的推荐方式;拥有public
属性通常是一个非常糟糕的主意。您应该创建属性private
并提供属性访问器方法以及get
和set
方法,如examples in the tutorial以上是关于在 JavaFX 中使用数据库填充表视图的主要内容,如果未能解决你的问题,请参考以下文章
从文本字段中提取空数据。表已填充,但无法检索对象。 Java/JavaFX
JavaFX TableView:线程“ JavaFX Application Thread”中的异常java.lang.IndexOutOfBoundsException