我已经做了足够的搜索来解决我已经部分完成的问题,但是这个错误让我感到不安。我正在尝试根据条件从数据库中获取数据。我有一个表'user_branch',其中包含外键列branchID应该在另一个表'branches'中获取相应的branchNames,我应该将结果显示到JTable中。当我做System.out.println时,我得到了所有结果,但它只返回最后一行当我在JTable(branchJTable)中显示时。这是我正在使用的代码
int row = user2BAssignedJTable.getSelectedRow();
assignUserID.setText(user2BAssignedJTable.getModel().getValueAt(row, 0).toString());
user2BAssignedField.setText(user2BAssignedJTable.getModel().getValueAt(row, 1).toString());
try {
String userBrQry = "SELECT branchID FROM user_branch WHERE userID IN(?) ";
String brQ = "SELECT branchName FROM branches WHERE branchID IN(%s) ";
pstmt = con.prepareStatement(userBrQry);
pstmt.setString(1, assignUserID.getText());
results = pstmt.executeQuery();
results.last();
int nRows = results.getRow();
results.beforeFirst();
while (results.next()) {
String branchIDS = results.getString("branchID");
StringBuilder builder = new StringBuilder();
for (int i = 0; i < nRows; i++) {
builder.append("?");
if (i + 1 < nRows) {
builder.append(",");
}
}
brQ = String.format(brQ, builder.toString());
PreparedStatement ps = con.prepareStatement(brQ);
for (int i = 0; i < nRows; i++) {
ps.setString(i + 1, branchIDS);
}
ResultSet rs = ps.executeQuery();
//branchJTable.setModel(DbUtils.resultSetToTableModel(rs));
javax.swing.table.DefaultTableModel model = new javax.swing.table.DefaultTableModel();
model.setColumnIdentifiers(new String[]{"Branch Name"});
branchJTable.setModel(model);
while (rs.next()) {
String branchname = rs.getString("branchName");
model.addRow(new Object[]{branchname});
}
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
忘记前3行,因为它是另一个JTable事件,我用它来获取userID作为获取特定用户分支给他的条件。 分配给用户的分支是动态的,因此使用StringBuilder。 我应该将结果显示到另一个名为branchJTable的JTable中,该JTable只显示最后一行。任何帮助都将不胜感激!
答案 0 :(得分:4)
从你的问题来看,我认为你应该声明JTable
javax.swing.table.DefaultTableModel model = new javax.swing.table.DefaultTableModel();
model.setColumnIdentifiers(new String[]{"Branch Name"});
branchJTable.setModel(model);
在第一次循环之前-
即。在代码中while (results.next()) {
之前。
否则在循环中,对于每个循环执行,
JTable模型正在初始化,您将在Jtable中获得最后一行。