做程序離不開連接數(shù)據(jù)庫(kù),所以一些打開,關(guān)閉數(shù)據(jù)庫(kù)是經(jīng)常要執(zhí)行的操作,打開數(shù)據(jù)庫(kù)后,在程序用完后要及時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接資源,以釋放內(nèi)存,避免資源耗盡.但現(xiàn)在有一個(gè)問(wèn)題,即當(dāng)我們關(guān)閉了
Connection對(duì)象后,
Statement,ResultSet對(duì)象是否會(huì)自動(dòng)關(guān)閉問(wèn)題,對(duì)于這個(gè)問(wèn)題,之前我在網(wǎng)上也找了相關(guān)資料,說(shuō)會(huì)自動(dòng)關(guān)閉,所以一段時(shí)間以來(lái),我都是只關(guān)閉
Connection對(duì)象,而沒(méi)有關(guān)閉
Statement,ResultSet對(duì)象,但程序也能正常運(yùn)行,程序也沒(méi)有因?yàn)橘Y源耗盡而崩潰,對(duì)于這一點(diǎn),其實(shí)是有原因的:
1)首先,關(guān)閉了
Connection對(duì)象后,是不會(huì)自動(dòng)關(guān)閉
Statement,ResultSet對(duì)象的:

try
{
Connection con = null;
Statement st = null;
ResultSet rs = null;
con = getConnection();
st = con.createStatement();
rs = st.executeQuery(sql);
}

catch(Exception e)
{
System.out.println("ocurr error
");
}

finally
{
con.close();con=null;

try
{
con.close();
}

catch(SQLException se)
{
System.out.println("ocurr close error
");
}
}

System.out.println("statement object:"+st);
System.out.println("resultset object:"+rs);

上面的代碼先獲取了連接,然后只關(guān)閉了
Connection對(duì)象,而沒(méi)有關(guān)閉
Statement,ResultSet對(duì)象,最后兩行代碼輸出
Statement,ResultSet對(duì)象,是有結(jié)果的,表明關(guān)閉了Connection對(duì)象,而沒(méi)有關(guān)閉Statement,ResultSet對(duì)象.
2)Statement對(duì)象將由Java垃圾收集程序自動(dòng)關(guān)閉,而作為一種好的編程風(fēng)格,應(yīng)在不需要Statement對(duì)象時(shí)顯式地關(guān)閉它們,這將立即釋放DBMS資源,有助于避免潛在的內(nèi)存問(wèn)題.
3)ResultSet維護(hù)指向其當(dāng)前數(shù)據(jù)行的光標(biāo).每調(diào)用一次next方法,光標(biāo)向下移動(dòng)一行.最初它位于第一行之前,因此第一次調(diào)用next將把光標(biāo)置于第一行上,使它成為當(dāng)前行.隨著每次調(diào)用next導(dǎo)致光標(biāo)向下移動(dòng)一行.按照從上至下的次序獲取ResultSet行,在ResultSet對(duì)象或其父輩Statement對(duì)象關(guān)閉之前,光標(biāo)一直保持有效.
所以在打開數(shù)據(jù)庫(kù)資源后,盡量手工關(guān)閉Connection對(duì)象和Statement,ResultSet對(duì)象,要養(yǎng)成一種良好的編程風(fēng)格.
注:他們?nèi)咧g關(guān)閉沒(méi)有任何關(guān)聯(lián),即先關(guān)閉誰(shuí)沒(méi)有任何先后順序,可以先關(guān)閉他們中的任何一個(gè),且關(guān)閉其中的任何一個(gè)對(duì)象都不會(huì)關(guān)閉其他其他對(duì)象,但一般養(yǎng)成按關(guān)閉ResultSet,Statement,Connection的順序關(guān)閉資源.
posted on 2008-06-06 11:02
henry1451 閱讀(6754)
評(píng)論(6) 編輯 收藏 所屬分類:
Java技術(shù)