我正在尝试从另一个表中的列中获取值并将其传递给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方法必须返回结果集
答案 0 :(得分:1)
while (rsS.next())
没有大括号,所以它只会在System.out.println(rsS.getString("ID"));
上循环。
在循环之外(rsS.next()
返回false
后)ResulSet
将为空。
也可能cs
没有持有查询,而是持有其他类型的语句,因此您无法使用cs.executeQuery()
,因为如果它没有返回结果,它会给您一个错误。< / p>
尝试使用cs.executeUpdate()
或cs.execute()
。