Java 用数据库中的数据填充tableview
我在javafx中有一个tableview,我希望它在tableview中显示来自数据库的所有数据,但是当我运行程序时,它只显示1行信息,而不是6行信息,我需要的信息是我的代码Java 用数据库中的数据填充tableview,java,javafx,tableview,Java,Javafx,Tableview,我在javafx中有一个tableview,我希望它在tableview中显示来自数据库的所有数据,但是当我运行程序时,它只显示1行信息,而不是6行信息,我需要的信息是我的代码 idTextField.setOnKeyPressed(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent event) {
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循环中来看看我对你的代码的编辑现在应该是什么样子。