2012-10-09 24 views
0

我想在我的Android應用程序中使用SQLite數據庫。它曾經工作過(我發誓我沒有改變任何東西),並且顯然有些改變,因爲我的代碼在查詢數據庫時不會返回任何東西。當我單步通過代碼本身時,我發現只要我的DBHelper調用了this.getReadableDatabase(),數據庫就有一個mStackTrace DatabaseObjectNotClosedException,儘管這是我第一次在應用程序中打開數據庫。奇怪的是,這個錯誤實際上並沒有引發,它可能不是我的問題,但我認爲這是一個很好的開始。getReadableDatabase上的Android DatabaseObjectNotClosedException

代碼:
{}剪斷

我不是100%究竟是怎麼回事。該類應該將數據庫從res/assets複製到本地數據文件夾,它似乎可以工作,但數據庫不正確,或者最終被指向錯誤的東西,因爲沒有行會返回。思考?

編輯:額外更新;我查看了存儲文件的數據/目錄,並找到了兩個單獨的數據庫,一個在files/,另一個在databases/files/擁有正確的數據庫,並保留所有數據,databases/只是一個空白的android數據庫設置。我的代碼應該在files/中調用數據庫,但也許它不是?

編輯:已解決。我發現了這個問題,和我的DBhelper無關。顯然,我在這個項目上的隊列編輯了一個他不應該進行測試的領域,並且忘記將其改回來。原來,我所做的SQL調用有問題。 感謝您的幫助!

+1

對於它的價值,我在過去的READ_ONLY標誌和供應商必須經歷的所謂的兼容性程序方面遇到了問題。嘗試刪除並重新運行你的東西。在打開數據庫時,它曾經讓我失敗,出現訪問衝突,然後從未關閉數據庫,並且讓我的應用程序在火中燃燒。 –

+0

爲了澄清我的最後一個聲明,供應商在其中一個電話中使用的sqlite版本,始終在db上打開一個事務,即使是在Read_only模式下,導致產生的行爲......被吸引。 –

+0

@GregGiacovelli它沒有解決這個問題,但它可能已經發現了一個更深的問題 - 我現在得到一個'sqlite_open_c2失敗'錯誤,儘管它似乎沒有影響任何東西。 –

回答

0

編輯:已解決。我發現了這個問題,和我的DBhelper無關。顯然,我在這個項目上的隊列編輯了一個他不應該進行測試的領域,並且忘記將其改回來。原來,我所做的SQL調用有問題。謝謝您的幫助!

1

請確保您只使用SQLiteOpenHelper的一個實例,如blog post中所述。我敢打賭,問題在於你不小心創建了這個類的多個實例,並忘記關閉其中的一個實例。你也可以做Sam建議的事情,並且非常小心地關閉你創建的SQLiteOpenHelper實例。但是,在我看來,在整個應用程序的生命週期中使用相同的SQLiteOpenHelper會更清晰。

+0

其實我沒有想到,但我不認爲這會導致我遇到的問題。在單個活動(沒有其他人)中,我只有一個「SQLiteOpenHelper」類的成員變量,並且在活動繼續前關閉。 –

相關問題