亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 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 關注
  • 272 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號