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 自動關閉。
不過我們在寫程序的時候應該做到用完就關閉的習慣。
自己的猜想還是對的。自己基礎不深,好多困難自己要多總結,不要一碰問題就去找資料。不好解決的問題,就用自己能想到的最笨的方法先把他弄通了,再去研究簡便的方法,理解更深的內容!
