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 自動關閉。 
不過我們在寫程序的時候應該做到用完就關閉的習慣。

自己的猜想還是對的。自己基礎不深,好多困難自己要多總結,不要一碰問題就去找資料。不好解決的問題,就用自己能想到的最笨的方法先把他弄通了,再去研究簡便的方法,理解更深的內容!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM