为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 ResultSet 进行循环?

如何使用 ResultSet 进行循环?

海绵宝宝撒 2022-05-25 16:30:26
所以,我想循环这个 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);
查看完整描述

3 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

问题:

if (rsl.next())

使固定:

while (rsl.next())

调试应用程序并检查您与数据库的连接是否有效。


查看完整回答
反对 回复 2022-05-25
?
慕的地6264312

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

}


查看完整回答
反对 回复 2022-05-25
?
慕码人8056858

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();


查看完整回答
反对 回复 2022-05-25
  • 3 回答
  • 0 关注
  • 274 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号