ResultSet自动关闭问题
rs=st.executeQuery("select id from member");
while(rs.next())
{
sql="insert into message values('";
sql+=rs.getString(1)+"','";
sql+=mg.getType()+"','";
sql+=mg.getTheme()+"','";
sql+=mg.getContent()+"','";
sql+=mg.getTime()+"')";
st.executeUpdate(sql);
}
上面代码,rs查询到多条记录,但当rs第二次next()时报错,说rs已关闭,但我并没关闭rs。
自己想想觉得和st有关,是不是生成该rs的st重新执行其他语句时rs就自动关闭了,于是修改程序,先取出rs的所有内容存到List,再用st去调list里面的数据。
rs=st.executeQuery("select id from member");
ArrayList<String> as=new ArrayList<String>();
while(rs.next()){
as.add(rs.getString(1).trim());
}
for(int i=0;i<as.size();i++){
sql="insert into message values('";
sql+=as.get(i)+"','";
sql+=mg.getType()+"','";
sql+=mg.getTheme()+"','";
sql+=mg.getContent()+"','";
sql+=mg.getTime()+"')";
st.executeUpdate(sql);
}
果然运行成功。
上网搜资料发现别人的说法:
其实不必关闭 ResultSet;
因为当产生它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该 ResultSet 将被 Statement 自动关闭。
不过我们在写程序的时候应该做到用完就关闭的习惯。
自己的猜想还是对的。自己基础不深,好多困难自己要多总结,不要一碰问题就去找资料。不好解决的问题,就用自己能想到的最笨的方法先把他弄通了,再去研究简便的方法,理解更深的内容!
浙公网安备 33010602011771号