我正在尋找一些日子一個解決方案,我的問題與SQLite和Android。我閱讀了很多關於sqlite和android的文章。我看到有人說你需要密切的CURSOR,而其他人則說你需要密切的數據庫,以及其他需要密切關注的人,以及其他你不需要關閉的人,因爲一個Android工程職位。Android需要關閉遊標,數據庫,兩者還是沒有?
在我的應用程序中,我們有太多的使用sqlite。
1 - 我們存儲要同步的內容。 2 - 我們在後臺添加/刪除東西。 3 - 我們有+/- 10個後臺服務,由Alarm Manager啓動以同步某些事物。
一切運行在同一時間,多個線程和更多。
當我得到的應用程序,我們有很多,很多和崩潰關閉遊標/數據庫,同時打開其他光標很多。很混亂。因此,閱讀後,谷歌工程師職位(我不記得谷歌組),一個答案,你不需要關閉sqlite光標或數據庫(我不記得,我不知道如果有所作爲)。
所以現在在同步的東西我的後臺服務,我得到它的錯誤:
Fatal Exception: android.database.CursorWindowAllocationException
Cursor window allocation of 2048 kb failed. # Open Cursors=593 (# cursors opened by this proc=593)
所以我需要做什麼?什麼是正確的方法?什麼會與很多使用它的線程和IntentServices一起工作?
我的示例代碼今天:
public static MyInternalObject getFirstAudience() {
SQLiteDatabase db = UbookProvider.getInstance().getReadableDatabase();
String sql = "SELECT * FROM " + UbookContract.MyInternalObject.TABLE_NAME + " LIMIT 1";
Cursor cursor = db.rawQuery(sql, null);
if (cursor != null) {
if (cursor.getCount() > 0) {
cursor.moveToFirst();
do {
return MyInternalObjectService.createFromCursor(cursor);
} while (cursor.moveToNext());
}
}
return null;
}
IM在黑暗中,我不知道一個體面的方式來做到這一點,以解決我的問題,在Android的數據庫。
任何人都可以幫到我嗎?
我的github(github.com/prsolucoes)也有很多開源項目。我爲社區做了很多事情,但今天是我需要的。
需要關閉遊標,數據庫是不必要的。 –
但是,如果你直接執行數據庫,像這樣: 'String sql =「DELETE FROM」+ UbookContract.MyTable.TABLE_NAME; SQLiteDatabase db = UbookProvider.getInstance()。getWritableDatabase(); db.execSQL(sql); ' 你需要密切的東西嗎? –
我不認爲在刪除操作後您需要關閉任何東西。 –