我正在寻找一些日子一个解决方案,我的问题与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); ' 你需要密切的东西吗? –
我不认为在删除操作后您需要关闭任何东西。 –