我是否需要调用getWritableDatabase()每次我处理数据 [英] Do I need to call getWritableDatabase() everytime I manipulate data

查看:127
本文介绍了我是否需要调用getWritableDatabase()每次我处理数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有关于Android的SQLite数据库一个​​新手的问​​题:

I have a newbie question about sqlite databases in android:

我真的需要检索可写入数据库,每次我处理数据的?

Do I really need to retrieve a writeable database everytime I manipulate data?

所以,我可以写一个DAO是这样的:

So can I write a DAO like this:

class Dao {

        private final SQLiteDatabase database;

        public Dao(SQLiteOpenHelper databaseHelper){

             database = databaseHelper.getWritableDatabase();
    }

    public void insert(...){

       ContentValues cv = new ContentValues(4);
       database.insertOrThrow(TABLE, null, cv);
       ...
    }


    public void update(...){
        ContentValues cv = new ContentValues(4);
        database.update(....);
    }
}

或者我必须写我的刀是这样的:

or do I must write my dao like this:

class Dao {

        private final SQLiteOpenHelper databaseHelper;

        public Dao(SQLiteOpenHelper databaseHelper){

             this.databaseHelper = databaseHelper
    }

    public void insert(...){

       SQLiteDatabase database = databaseHelper.getWritableDatabase();
       ContentValues cv = new ContentValues(4);
       database.insertOrThrow(TABLE, null, cv);
       ...
    }


    public void update(...){
        SQLiteDatabase database = databaseHelper.getWritableDatabase();
        ContentValues cv = new ContentValues(4);
        database.update(....);
    }
}

如果第二种方法是正确的: 我还需要每次操作后关闭数据库:

If the second approach is the correct one: do I also need to close the database after every operation:

public void update(...){
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    ContentValues cv = new ContentValues(4);
    database.update(....);
    database.close();
}

我猜想它同样为databaseHelper.getReadableDatabase()吧?

I guess its the same for databaseHelper.getReadableDatabase() right?

推荐答案

您应该关闭所有的游标打开。但数据库实例并不需要在每次使用后关闭。

You should close every cursor you open. But the database instance doesn't need to be closed after each use.

我通常可以获取在的onCreate可写入数据库()并存储所产生的 SQLiteDatabase 为每一个成员变量活动,从来没有明确关闭该实例。 (但同样,我只要我处理完他们的结果封闭每个光标。)

I usually fetch a writable database in onCreate() and store the resulting SQLiteDatabase as a member variable for each activity, and never explicitly close that instance. (But again, I do close every cursor as soon as I'm finished processing their results.)

请参阅管理中的Andr​​oid SQLite的连接上这个问题的一点讨论。

See Managing SQLite Connections in Android for a little more discussion on the subject.

这篇关于我是否需要调用getWritableDatabase()每次我处理数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆