簡體   English   中英

執行多個查詢ResultSet問題中沒有當前行

[英]execute multiple queries No current row in the ResultSet issue

我試圖從另一個表的列中獲取一個值,並將其傳遞給SP過程,但是我得到了

ResultSet中沒有當前行

cs.setString(1, rsS.getString("ID")); // p_ID cs.setString(1, rsS.getString("ID")); // p_ID

正確的方法是什么

//get value P_ID based on itemnumber
         PreparedStatement preparedStatement = null;
          String sqli = "select ID,[ItemNumber] from [file].[Item] where [ItemNumber] =?";
         preparedStatement = con.prepareStatement(sqli);
         preparedStatement.setString(1, itemcard);
         ResultSet rsS = preparedStatement.executeQuery();
                                while (rsS.next())
                                    System.out.println(rsS.getString("ID"));

                                //for updating trash
                                CallableStatement cs = null;
                                String queryundo = "{ call [file].[usp_trashItem](?,?,?,?)}  ";
                                cs = con.prepareCall(queryundo);
                                cs.setString(1, rsS.getString("ID")); // p_ID
                                cs.setString(2, "U"); //p_Action(U for untrash T for Trash)
                                cs.setInt(3, 1); //p_Quantity
                                cs.setString(4, doerTicket); //p_DoerTicket
                                cs.executeQuery();
                                con.close();
            }
        }

並與此

                    PreparedStatement preparedStatement = null;
                    String sqli = "select ID,[ItemNumber] from [file].[Item] where [ItemNumber] =?";
                    preparedStatement = con.prepareStatement(sqli);
                    preparedStatement.setString(1, itemcard);
                    ResultSet rsS = preparedStatement.executeQuery();
                    while (rsS.next()) {
                        System.out.println(rsS.getString("ID"));

                        //for updating trash
                        CallableStatement cs = null;
                        String queryundo = "{ call [file].[usp_trashItem](?,?,?,?)}  ";
                        cs = con.prepareCall(queryundo);
                        cs.setString(1, rsS.getString("ID")); // p_ID
                        cs.setString(2, "U"); //p_Action(U for untrash T for Trash)
                        cs.setInt(3, 1); //p_Quantity
                        cs.setString(4, doerTicket); //p_DoerTicket
                        cs.executeQuery();
                        con.close();
                    }
                }
            }

我得到

executeQuery方法必須返回結果集

while (rsS.next())沒有大括號,因此它將僅在System.out.println(rsS.getString("ID"));上循環System.out.println(rsS.getString("ID"));

在循環外部(在rsS.next()返回false ), ResulSet將為空。

同樣, cs可能不保存查詢,而是保留其他某種類型的語句,因此您不能使用cs.executeQuery()因為如果不返回結果,它將給您一個錯誤。

嘗試使用cs.executeUpdate()cs.execute()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM