如何使用 ResultSet 进行循环?

所以,我想循环这个 ResultSet 以便一一更新表格,但是方法 while(rsl.next()) 不能帮助我进行循环。它只工作一次,然后跳过其他工作。有人可以帮我解决这个问题吗?提前致谢


try {

    String url = "jdbc:mysql://localhost/minimarket";

    String user = "root";

    String pass = "";

    Class.forName("com.mysql.jdbc.Driver");

    Connection conn = DriverManager.getConnection(url, user, pass);

    Statement stmt = 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");

        stmt.executeUpdate("UPDATE barang SET stok=stok+'"+jmlh+"' WHERE nama_barang='"+nb+"' AND detail='"+dtl+"' AND berat='"+beratt+"'");

        stmt.executeUpdate("DELETE FROM keranjang WHERE pemesan ='"+login.userid+"' AND nama_barang='"+nb+"'");

    }


    conn.close();

} catch (Exception error) {


}


System.exit(0);


海绵宝宝撒
浏览 275回答 3
3回答

交互式爱情

问题:if (rsl.next())使固定:while (rsl.next())调试应用程序并检查您与数据库的连接是否有效。

慕的地6264312

当您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+"'");}

慕码人8056858

如果我正确理解了您的问题,这里可能存在两个问题:结果集为空 - 我认为这不可能是这样的情况,就好像你会在你的 while 循环中得到一个异常并且什么都不会输出第二个问题是 resultset.getString(i++) 将获得第 1,2 列, 3 依此类推,从随后的每一行开始,我认为第二点可能是您的问题。假设您只返回了 1 行,如下所示Col 1, Col 2, Col3&nbsp;A&nbsp; &nbsp;, B,&nbsp; &nbsp; C你的代码只会得到 A - 它不会得到其余的列。我建议您更改代码如下:ResultSet resultset = ...;ArrayList<String> arrayList = new ArrayList<String>();&nbsp;while (resultset.next()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; int i = 1;&nbsp; &nbsp; &nbsp; &nbsp; while(i <= numberOfColumns) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arrayList.add(resultset.getString(i++));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(resultset.getString("Col 1"));&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(resultset.getString("Col 2"));&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(resultset.getString("Col 3"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(resultset.getString("Col n"));}要获取列数:ResultSetMetaData metadata = resultset.getMetaData();int numberOfColumns = metadata.getColumnCount();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java