【问题标题】:javafx Tableview not showing data from databasejavafx Tableview不显示数据库中的数据
【发布时间】:2016-11-18 18:41:03
【问题描述】:

我的表格视图无法在其中显示数据。它在控制台中显示结果集数据,但无法在 tableview javafx 中显示。请帮忙。

教室详情

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"));

}       
}

课堂空间

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();
            }
    }
    }

班级列表室

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;
            }
        }

【问题讨论】:

  • 什么是Dbconnection
  • @James_D 这可能是缺少的类定义 :))
  • 我永远无法理解为什么需要帮助的人不能花时间确保他们的问题有意义。

标签: java mysql javafx tableview


【解决方案1】:

getRoom.rmview 方法中,您一次又一次地填写分配rmview 实例的字段,但您永远不会修改rmviewroomlist;永远不会修改;它仍然是空的。由于您在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。特别是关于缩写的部分,因为这会使您的代码难以被其他人阅读。此外,object 作为类型参数的名称是一个糟糕的选择。这会导致混淆,通常单个大写字母用于类型参数。

rmlist 类的用途也不清楚。它包含与ListRoom 相同的字段,但还包含一个您希望实际存储数据的列表。为什么需要这些字段?你需要rmlist 还是可以用ObservableList&lt;ListRoom&gt; 代替?

【讨论】:

  • 非常感谢它解决了我的问题。从下一次开始将负责命名。
猜你喜欢
  • 2015-12-24
  • 2018-11-13
  • 2013-04-20
  • 2019-12-19
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
相关资源
最近更新 更多