我从表EmployeeLeave中获取记录并将其存储在结果集中。然后我将此结果集插入数据库表中,但我只能插入结果集的第一行而不是所有行。
如何插入结果集的所有行?
r = stmt.executeQuery("select * from EmployeeLeave where EmployeeNo='"+empno+"'");
while(r.next())
{
for(int i=0;i<=r.getRow();i++)
{
int empid = r.getInt(1);
String leave = r.getString(2);
r = stmt.executeQuery("insert into ApprovedLeave values('"+empid+"','"+leave+"','True')");
}
}
答案 0 :(得分:1)
在迭代executeQuery
ResultSet
时,您无法致电r
。这将有效地重置您的第一个ResultSet
以及Statement
,从而导致只进行一次插入。要修复,请创建一个新的Statement
。
要插入executeUpdate
,请使用:
stmt2.executeUpdate("insert into ApprovedLeave values('"+empid+"','"+leave+"','True')");
答案 1 :(得分:1)
当您第一次执行内部队列时,它会从外部查询中关闭结果集,因为您正在重用相同的jdbc语句。为此,您需要使用两个不同的语句对象实例。
但是,没有理由将所有数据都提取回应用程序,只是将其发送回数据库。您可以执行类似的操作(语法可能因数据库供应商而略有不同):
"insert into ApprovedLeave select EmployeeNo, leave, 'True' from EmployeeLeave where EmployeeNo = '" + empno + "'"
甚至更好的是PreparedStatement:
"insert into ApprovedLeave select EmployeeNo, leave, 'True' from EmployeeLeave where EmployeeNo = ?"
然后将empno变量绑定到语句
答案 2 :(得分:0)
这可能是因为当你调用第二个方法时r指向最后一行。你需要在下一次操作之前重置r吗?