Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用数据库中的数据填充tableview_Java_Javafx_Tableview - Fatal编程技术网

Java 用数据库中的数据填充tableview

Java 用数据库中的数据填充tableview,java,javafx,tableview,Java,Javafx,Tableview,我在javafx中有一个tableview,我希望它在tableview中显示来自数据库的所有数据,但是当我运行程序时,它只显示1行信息,而不是6行信息,我需要的信息是我的代码 idTextField.setOnKeyPressed(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent event) {

我在javafx中有一个tableview,我希望它在tableview中显示来自数据库的所有数据,但是当我运行程序时,它只显示1行信息,而不是6行信息,我需要的信息是我的代码

    idTextField.setOnKeyPressed(new EventHandler<KeyEvent>() 
    {
        @Override
        public void handle(KeyEvent event) 
        {   
            if(event.getCode().equals(KeyCode.ENTER))
            {
                try 
                {
                    // Get a result set containing all data from test_table

                    PreparedStatement st = connection.prepareStatement("SELECT * FROM abrasaldo where grade_No = ?");

                    // For each row of the result set ...

                    int getData = Integer.parseInt(idTextField.getText());

                    st.setInt(1 , getData);

                    ResultSet rs = st.executeQuery();

                    if (rs.next()) 
                    {

                        ObservableList<StudentClass> datatable = FXCollections.observableArrayList();


                        for(int i = 1; 1 < rs.getMetaData().getColumnCount(); i++)
                        {

                            datatable.add(new StudentClass(rs.getInt("grade_No") , rs.getString("grade_Code"), 
                                    rs.getString("grade_Title"), rs.getString("grade_SubjectDesc"),
                                    rs.getDouble("grade_Grade"), rs.getString("grade_DaySched"),
                                    rs.getString("grade_TimeSched"), rs.getString("grade_Room"), 
                                    rs.getString("grade_Term"), rs.getDouble("grade_Unit"), rs.getString("grade_Faculty")));
                        }

                        table.setItems(datatable);  
                        noDataLabel.setText("");

                    }
                    else
                    {
                        ObservableList<StudentClass> datatable = FXCollections.observableArrayList();

                        table.setItems(datatable);

                        noDataLabel.setText("No Data");
                        noDataLabel.setTextFill(Color.RED);
                    }
                }
                catch (NumberFormatException e) 
                {
                    ObservableList<StudentClass> datatable = FXCollections.observableArrayList();

                    table.setItems(datatable);

                    noDataLabel.setText("No Data");
                    noDataLabel.setTextFill(Color.RED);
                }
                catch (SQLException e) 
                {
                    noDataLabel.setText("No Data");
                    noDataLabel.setTextFill(Color.RED);
                }

            }           

            }           
    });
idTextField.setOnKeyPressed(新的EventHandler()
{
@凌驾
公共无效句柄(KeyEvent事件)
{   
if(event.getCode().equals(KeyCode.ENTER))
{
尝试
{
//获取包含测试表中所有数据的结果集
PreparedStatement st=连接。prepareStatement(“从abrasaldo中选择*,其中等级号=?”;
//对于结果集的每一行。。。
int getData=Integer.parseInt(idTextField.getText());
st.setInt(1,getData);
结果集rs=st.executeQuery();
如果(rs.next())
{
ObservableList datatable=FXCollections.observableArrayList();
对于(int i=1;1
可以尝试在结果集中循环,而不是使用单个if语句。结果集指针只指向第一个元素,不会遍历所有记录

while(rs.next()){
     datatable.add(new StudentClass(rs.getInt("grade_No") , rs.getString("grade_Code"), 
                                rs.getString("grade_Title"), rs.getString("grade_SubjectDesc"),
                                rs.getDouble("grade_Grade"), rs.getString("grade_DaySched"),
                                rs.getString("grade_TimeSched"), rs.getString("grade_Room"), 
                                rs.getString("grade_Term"), rs.getDouble("grade_Unit"), rs.getString("grade_Faculty")));
}

表.设置项(数据表)

实际上,每次输入rs.next()循环时,都会创建一个新的“datatable”

    ObservableList<StudentClass> datatable = FXCollections.observableArrayList();

observeListDataTable=FXCollections.observearraylist();

只要将上面的行移到{if(rs.next())}循环之外,就可以了。

您从记录集中只得到一条记录。.是的,但我在数据库中有6个信息,但只有1个显示为什么?for循环仅在TableView中显示1个信息时重复该信息。如果使用System.out.println,则该循环有效。它在tableview中不起作用。我想把所有的数据放到tableview中,把它放到类中,这样它就会显示在tableview中。尝试在while循环之后添加数据表,这样您就可以确保数据源中的所有数据都在datatable列表中。它仍然是一样的,表只是获取数据库中的最后一个数据。我想问题出在tableview上了。文章能不能把你现在使用的代码放到while循环中来看看我对你的代码的编辑现在应该是什么样子。