2011-10-27 53 views
0

嗨我想清理我的代碼,以刪除錯誤,指出我的數據庫連接已打開,但沒有正確關閉。Android數據庫連接和嘗試捕捉有關範圍

如果我有一個db.open()然後幾個嘗試圍繞db查詢的catch語句,那麼在try catch後面的db.close()將使用try catch中的同一個db連接,或者java離散運行嘗試catch語句,以便db連接不可用。

總之,我應該有代碼是這樣的:

db.open(); 
try { 
// here 
db.getThings() 
} catch() { 
// there 
} 
try { 
// here 2 
db.getMoreThings() 
} catch() { 
// there 2 
} 
db.close(); 

或者這樣:

try { 
// here 
db.open(); 
db.getThings() 
db.close(); 
} catch() { 
// there 
} 

try { 
// here 2 
db.open(); 
db.getMoreThings() 
db.close(); 
} catch() { 
// there 2 
} 

我還以爲開一個數據庫連接的第一個解決方案是最好的一個。但是我遇到了不關閉數據庫連接的問題,並且我認爲這是我設計中的一個基本問題。

我也嘗試在onResume()中打開連接,然後在onPause()中關閉,但仍然有問題。

回答

0

有一個建議,因爲你選擇的數據儘快關閉數據庫連接,所以在我的應用我主要用下面的模板:

db.open(); 
try { 
    // select data 
} finally { 
    db.close(); 
} 

它爲我工作。

+0

嗯我只是考慮把'db.close()'放在'Finally'語句中。我意識到,對於初學者來說,如果我的'try/catch'實際上捕捉到一個異常,那麼我的'db.close()'將不會運行,但最終它會保證'db.close()'。我有一個問題,但是:你認爲在try語句之前還是在INSIDE之前有更好的db.open()?感謝您的建議 – wired00

+0

我嘗試之前先放入db.open,因爲它可能會引發一些異常。如果你把它放在裏面try - finally和db.open會觸發一個異常,那麼finally塊中的db.close也會觸發一個異常(類似「DB not open」),它會掩蓋原來的異常。 – slkorolev

+0

謝謝。現在就執行這個程序,看看它是如何完美運作的 – wired00