执行多个查询ResultSet问题中没有当前行

时间:2016-12-17 19:34:25

标签: java sql-server

我正在尝试从另一个表中的列中获取值并将其传递给SP过程但是我得到了

  

ResultSet中没有当前行

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方法必须返回结果集

1 个答案:

答案 0 :(得分:1)

while (rsS.next())没有大括号,所以它只会在System.out.println(rsS.getString("ID"));上循环。

在循环之外(rsS.next()返回false后)ResulSet将为空。

也可能cs没有持有查询,而是持有其他类型的语句,因此您无法使用cs.executeQuery(),因为如果它没有返回结果,它会给您一个错误。< / p>

尝试使用cs.executeUpdate()cs.execute()