如何将ResultSet插入新的MYSQL表中?

时间:2016-04-08 03:52:17

标签: java mysql jdbc

我想将执行MYSQL查询的结果插入到另一个MYSQL表中。以下是代码段:

rs1 = st.executeQuery(query1);
while(rs1.next()){
    insertData(species,rs1,"try");      
}

结果集rs1包含由于执行query1而返回的n行数。我试图将rs1中的所有行插入到另一个表中。插入操作在函数insertData()中执行,如下所示:

public void insertData(String species, ResultSet rs, String table)throws Exception{
    String q = "Insert into "+table+" values("+rs.getFloat("sl")+","+rs.getFloat("sw")+","+rs.getFloat("pl")+","+rs.getFloat("pw")+",'"+rs.getString("classification")+"')";
    int x = st.executeUpdate(q);
    if( x == 0)
        System.out.println("Error inserting data");
}

运行代码后,我得到以下异常:

Operation not allowed after ResultSet closed

据我所知,rs1.next()将光标指向第一次迭代的第一行。

如果我遗漏了一些基本的东西,请纠正我。

1 个答案:

答案 0 :(得分:2)

  

默认情况下,每个Statement对象只能同时打开一个ResultSet对象。因此,如果读取一个ResultSet对象与另一个ResultSet对象的读取交错,则每个ResultSet对象必须由不同的Statement对象生成。 Statement接口中的所有执行方法都隐式关闭一个语句的当前ResultSet对象(如果存在一个打开的对象)。

引自Statement Java doc

您使用相同的Statement st对象执行两次不同的查询。

rs1 = st.executeQuery(query1); // executed before while loop
int x = st.executeUpdate(q);  // executed in while loop

st.executeUpdate(q);方法中执行insertData()时,ResultSet rs1已关闭。您需要创建一个新的Statement并执行第二个查询。