3 回答

TA貢獻1817條經驗 獲得超6個贊
當您executeUpdate在語句上執行一個 int 時,將返回一個 int ,最重要的是rs1,您的查詢中的結果集對象將關閉并且無法再訪問,因為Statement該類僅處理一個查詢/結果集。我自己沒有測試過,但我很確定這就是原因。
解決方案是為更新/刪除設置一個單獨的Statement對象,以免影響原始對象ResultSet。像下面的東西
Statement stmt = conn.createStatement();
Statement updStmt = conn.createStatement();
ResultSet rsl = stmt.executeQuery("SELECT * FROM keranjang WHERE pemesan='"+login.userid+"'");
while (rsl.next()) {
String nb = rsl.getString("nama_barang");
String dtl = rsl.getString("detail");
String beratt = rsl.getString("berat");
String hrga = rsl.getString("harga");
String jmlh = rsl.getString("jumlah");
updStmt.executeUpdate("UPDATE barang SET stok=stok+'"+jmlh+"' WHERE nama_barang='"+nb+"' AND detail='"+dtl+"' AND berat='"+beratt+"'");
updStmt.executeUpdate("DELETE FROM keranjang WHERE pemesan ='"+login.userid+"' AND nama_barang='"+nb+"'");
}

TA貢獻1803條經驗 獲得超6個贊
如果我正確理解了您的問題,這里可能存在兩個問題:
結果集為空 - 我認為這不可能是這樣的情況,就好像你會在你的 while 循環中得到一個異常并且什么都不會輸出第二個問題是 resultset.getString(i++) 將獲得第 1,2 列, 3 依此類推,從隨后的每一行開始,我認為第二點可能是您的問題。
假設您只返回了 1 行,如下所示
Col 1, Col 2, Col3
A , B, C
你的代碼只會得到 A - 它不會得到其余的列。
我建議您更改代碼如下:
ResultSet resultset = ...;
ArrayList<String> arrayList = new ArrayList<String>();
while (resultset.next()) {
int i = 1;
while(i <= numberOfColumns) {
arrayList.add(resultset.getString(i++));
}
System.out.println(resultset.getString("Col 1"));
System.out.println(resultset.getString("Col 2"));
System.out.println(resultset.getString("Col 3"));
System.out.println(resultset.getString("Col n"));
}
要獲取列數:
ResultSetMetaData metadata = resultset.getMetaData();
int numberOfColumns = metadata.getColumnCount();
添加回答
舉報