如何在Android中正确打开/关闭SQLite数据库

前端之家收集整理的这篇文章主要介绍了如何在Android中正确打开/关闭SQLite数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序功能正常,不强制关闭或崩溃.但是当我看着LogCat时,它偶尔会给我这个:
05-20 15:24:55.338: E/sqliteDatabase(12707): close() was never explicitly called on database '/data/data/com.---.--/databases/debt.db' 
05-20 15:24:55.338: E/sqliteDatabase(12707): android.database.sqlite.DatabaSEObjectNotClosedException: Application did not close the cursor or database object that was opened here

有一点路要走

05-20 15:24:55.338: E/System(12707): Uncaught exception thrown by finalizer
05-20 15:24:55.338: E/System(12707): java.lang.IllegalStateException: Don't have database lock!

我不知道什么时候我应该打开和关闭我的数据库

我有一个主要的活动,只是一个闪屏.然后进入使用DB中的信息调用ListView的活动;所以在这个活动中DB首次打开.

还有一个其他活动,其中DB需要使用ListVeew分支.我什么时候应该打开和关闭这个?词似乎是我只需要打开一次,然后在应用程序“暂停”,“停止”或“销毁”时关闭.

如果是这种情况,我在哪里将db.close()方法…放在onStop等的Splash Screen Main Activity中?或与打开数据库的活动相同的活动?还是有另一个地方?

更新:

这是错误指向的代码行:

public void open() throws sqlException {
    database = dbHelper.getWritableDatabase();
}

解决方法

如果您使用的是DatabaseHelper类的实例,并且在初始化DBHelper对象之后,每次在数据库中工作时,都应该在开始工作之前调用open方法,然后创建一个新的游标,查询数据库,执行使用您刚刚存储在游标中的信息,完成关闭游标后,关闭数据库.例如,如果您想要抓取数据库中的每个项目,都可以执行以下操作:
...    
DataBaseHelper db = new DataBaseHelper(this);
... 
db.open();
Cursor cursor = db.getAllItems(); 
maxCount = cursor.getCount(); 
Random gen = new Random();
row = gen.nextInt(maxCount); // Generate random between 0 and max
if (cursor.moveToPosition(row)) {
        String myString = cursor.getString(1);  //here I want the second column
        displayString(myString); //private method
    }
cursor.close();
db.close();

getAllItems是我的DatabaseHelper中的一个公共方法,它看起来像这样,如果你想知道

public Cursor getAllItems() 
{
    return db.query(DATABASE_TABLE,new String[] {
            KEY_ROWID,KEY_NAME
            },null,null);
}

这是我如何访问我的数据库,我没有得到任何错误,它的工作完美.

猜你在找的Android相关文章