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();
添加回答
举报