我想将执行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()
将光标指向第一次迭代的第一行。
如果我遗漏了一些基本的东西,请纠正我。
答案 0 :(得分:2)
默认情况下,每个Statement对象只能同时打开一个ResultSet对象。因此,如果读取一个ResultSet对象与另一个ResultSet对象的读取交错,则每个ResultSet对象必须由不同的Statement对象生成。 Statement接口中的所有执行方法都隐式关闭一个语句的当前ResultSet对象(如果存在一个打开的对象)。
您使用相同的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并执行第二个查询。