我有一個jTable,有4列和6行。我想迭代通過行索引列索引0這是我的ID列的值,並將其傳遞給計數SQL查詢。我寫了下面的代碼,因爲我沒有想出如何在遍歷表後傳遞列值。是通過jTable遍歷並將列值傳遞給java中的sql查詢
有人請讓我知道我的代碼做錯了請。
for (int row = 0; row > jTable2.getRowCount(); row++){
for (int col =0; col > jTable2.getColumnCount(); col ++)
try{
DefaultTableModel model = (DefaultTableModel)jTable2.getModel();
String selected = model.getValueAt(row, col+1).toString();
String sql = "select COUNT(COURSEBOOKED) from APP.BOOKCOURSE where COURSEBOOKED = '"+selected+"'";
try(Connection con = DriverManager.getConnection("jdbc:derby:MTD","herbert","elsie1*#");
PreparedStatement pst = con.prepareStatement(sql);) {
ResultSet rs = pst.executeQuery();
while(rs.next()){
String Sum = rs.getString("COUNT(COURSEBOOKED)");
System.out.println(Sum);
if (rs.wasNull()){
System.out.println("No record found");
}
}
}
catch(SQLException e){
}
}
catch(Exception e){
}
}
這是修改後提出的最終代碼。
String sql = "select COUNT(COURSEBOOKED) as count from APP.BOOKCOURSE where COURSEBOOKED =?";
try(Connection con = DriverManager.getConnection("jdbc:derby:MTD","herbert","elsie1*#");
PreparedStatement pst = con.prepareStatement(sql);){
for(int row = 0; row < jTable2.getRowCount(); row++){
DefaultTableModel model = (DefaultTableModel)jTable2.getModel();
String selected = model.getValueAt(row, 1).toString();
pst.setString(1, selected);
try(ResultSet rs = pst.executeQuery();){
while (rs.next()){
String Sum = rs.getString("count");
System.out.println(Sum);
}
}
}
}
catch(SQLException e){
JOptionPane.showMessageDialog(this, e);
}
這引出我的下一個問題。 AM不知道我是否應該爲它啓動一個新線程,或者繼續這個線程。我的挑戰是我現在想要在當前jTable2的現有4列上附加一列,並顯示上述查詢的值。添加一個新的專欄中,我已經使用這個代碼,
TableColumn c = new TableColumn();
c.setHeaderValue("Training accomplished");
model.addColumn(c);
這增加了列,但它的填充與列索引0值。我如何從上面的查詢中得到Sum中保存的值所填充的新列。
這不工作主要是因爲你的for循環是錯誤的。 'row'永遠不會是'> jTable2.getRowCount()'。 「col」相同。並且列從0開始,而不是1。您還應該學會正確使用準備好的語句。他們的重點是傳遞參數並避免字符串連接來傳遞它們。最後,停止捕捉異常並忽略它們。你這樣做是爲了打擊自己:如果拋出異常,你就不會知道它。 –
'select COUNT(COURSEBOOKED)as summedValue ...'然後你就可以使用'rs.getString(「summedValue」)'代替。我想你會發現數據庫爲列指定了它自己的「名稱」,它與你的不匹配(作爲猜測) – MadProgrammer
1.爲什麼當你只使用2nd for循環(在單元格上迭代)時需要索引爲0的單元?同樣,如JB已經告訴你的,兩個循環的終止條件都是錯誤的。你應該使用''''''''''''''。 2.由於JB已經說過,使用準備好的陳述。去谷歌上查詢。 3.爲什麼每次需要啓動查詢時都會創建新連接?非常無效。 4.按照MadProgrammer的說法在您的查詢中使用別名。它會幫助你獲得結果。 – Aakash