javafx Tableview不显示数据库中的数据
问题描述:
我的表格视图无法显示数据。它在控制台中显示结果集数据,但无法在tableview javafx中显示。请帮忙。javafx Tableview不显示数据库中的数据
类RoomDetails
package application;
public class RoomDetails<object> {
rmlist rmList = new rmlist();
getroom getRoom = new getroom();
@FXML
private Button btnRoom_add;
@FXML
private Button btnRoom_update;
@FXML
private Button btnRoom_del;
@FXML
private TableView<ListRoom> tblroomdetails;
@FXML
private TableColumn<object, Object> tblroomno;
@FXML
private TableColumn<object, Object> tblroomtype;
@FXML
private TableColumn<object, Object> tblac;
@FXML
private TableColumn<object, Object> tbltariff;
@FXML
private TableColumn<object, Object> tblstatus;
@FXML
private Label lblRoomdetails;
Dbconnection dbcon = new Dbconnection();
Connection con;
PreparedStatement pst;
ResultSet rs;
@FXML
public void btnRoom_addonAction(ActionEvent event) throws IOException{
FXMLLoader fXMLLoader = new FXMLLoader();
fXMLLoader.setLocation(getClass().getResource("/application/AddRoom.fxml"));
try{
fXMLLoader.load();
Parent parent = fXMLLoader.getRoot();
Scene scene = new Scene(parent);
scene.setFill(new Color(0, 0, 0, 0));
AddRoom addRoom = fXMLLoader.getController();
addRoom.lbl_Add_Room.setText("ADD Room");
Stage stage = new Stage();
stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL);
stage.initStyle(StageStyle.TRANSPARENT);
stage.show();
}
catch(IOException e){
e.printStackTrace();
}
}
public void viewDetails() {
tblroomdetails.setItems(rmList.roomlist);
getRoom.rmview(rmList);
tblroomno.setCellValueFactory(new PropertyValueFactory<>("roomno"));
tblroomtype.setCellValueFactory(new PropertyValueFactory<>("rmtype"));
tblac.setCellValueFactory(new PropertyValueFactory<>("acstat"));
tbltariff.setCellValueFactory(new PropertyValueFactory<>("rmtariff"));
tblstatus.setCellValueFactory(new PropertyValueFactory<>("rmstatus"));
}
}
类getroom
package application;
public class getroom {
Dbconnection dbcon = new Dbconnection();
Connection con;
PreparedStatement pst;
ResultSet rs;
public void rmview(rmlist rmList) {
con = dbcon.geConnection();
try{
pst = con.prepareStatement("select * from room");
rs = pst.executeQuery();
System.out.println(rs);
while (rs.next()){
rmList.roomno = rs.getString(1);
rmList.rmtype = rs.getString(2);
rmList.acstat = rs.getString(3);
rmList.rmtariff = rs.getString(4);
rmList.rmstatus = rs.getString(5);
}
rs.close();
pst.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
类ListRoom
package application;
public class ListRoom {
public String roomno;
public String rmtype;
public String acstat;
public String rmtariff;
public String rmstatus;
public ListRoom(String roomno, String rmtype, String acstat, String rmtariff, String rmstatus) {
super();
this.roomno = roomno;
this.rmtype = rmtype;
this.acstat = acstat;
this.rmtariff = rmtariff;
this.rmstatus = rmstatus;
}
public String getRoomno() {
return roomno;
}
public void setRoomno(String roomno) {
this.roomno = roomno;
}
public String getRmtype() {
return rmtype;
}
public void setRmtype(String rmtype) {
this.rmtype = rmtype;
}
public String getAcstat() {
return acstat;
}
public void setAcstat(String acstat) {
this.acstat = acstat;
}
public String getRmtariff() {
return rmtariff;
}
public void setRmtariff(String rmtariff) {
this.rmtariff = rmtariff;
}
public String getRmstatus() {
return rmstatus;
}
public void setRmstatus(String rmstatus) {
this.rmstatus = rmstatus;
}
}
类rmlist
package application;
public class rmlist {
public String roomno;
public String rmtype;
public String acstat;
public String rmtariff;
public String rmstatus;
public ObservableList<ListRoom> roomlist = FXCollections.observableArrayList();
}
类DBConnection的
package application;
class DBconnection{
public Connection con;
String username = "root";
String password = "123456";
String driverclass = "com.mysql.jdbc.Driver";
String db_url = "jdbc:mysql://localhost:3306/";
String unicode= "?useUnicode=yes&characterEncoding=UTF-8&useSSL=false";
public Connection mkDataBase() throws SQLException{
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(db_url, username, password);
} catch (Exception e){
}
return con;
}
public Connection geConnection(){
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(db_url+"hotel"+unicode, username, password);
} catch (ClassNotFoundException | SQLException ex) {
System.out.println("Too Many Connection");
}
return con;
}
}
答
在getRoom.rmview
方法您填写一次又一次地分配rmview
实例的领域,但你永远不修改rmview
的roomlist
绝不会被修改;它仍然是空的。由于您在TableView
中使用roomlist
,因此没有要显示的数据。
而应该添加新元素的每一行数据库查询返回:
// remove data previously in the list
rmList.roomlist.clear();
while (rs.next()){
rmList.roomlist.add(new ListRoom(rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getString(5)));
}
此外,我建议您遵守the naming conventions。尤其是关于abreviations的部分,因为这会让你的代码难以阅读。此外object
是一个不好的选择作为类型参数的名称。它会导致混淆,并且通常使用单个大写字母作为类型参数。
此外rmlist
类的目的还不清楚。它包含与ListRoom
相同的字段,但也包含您希望数据实际存储的列表。你为什么需要这些领域?你需要rmlist
还是只需要用ObservableList<ListRoom>
替换?
+0
非常感谢它解决了我的问题。从下一次开始将负责命名。 –
什么是'Dbconnection'? –
@James_D这可能是缺少的类定义:)) – NwDev
我永远不会明白为什么需要帮助的人不能花时间确定他们的问题是否合理。 –