“插入查询”仅插入数据库表中结果集的第一行

时间:2012-09-22 14:24:33

标签: java

我从表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')");
    }
}

3 个答案:

答案 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吗?