每次启动应用程序时,我的SQLite数据库是否重新创建?

时间:2013-10-06 13:11:41

标签: android sqlite

我有一个正在处理的应用程序,我想知道当我关闭我的应用程序并再次启动它时,我的数据库会发生什么,因为我从未指定onPause,onResume和onDestroy上发生了什么(因为我不知道在那里指定什么)。

这是我的DBTools类

public class DBTools extends SQLiteOpenHelper {

    public DBTools(Context applicationcontext) {
        super(applicationcontext, "rggarb.db", null, 1);
    }

    public void onCreate(SQLiteDatabase database) {

        String tableUsers = "CREATE TABLE users ( userId INTEGER PRIMARY KEY, userName TEXT, userEmail TEXT, userPassword TEXT, userAvatar TEXT, userSex TEXT)";
        database.execSQL(tableUsers);

    }

    public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
        String dropTableUsers = "DROP TABLE IF EXISTS tableUsers";
        database.execSQL(dropTableUsers);
        onCreate(database);
    }
             //some CRUD methods here, irrelevant for this question

}

以下是我如何使用它

MainActivity中的

public class MainActivity extends Activity  {
    DBTools dbTools = new DBTools(this);

然后用户进入注册活动,然后:

public class Signup扩展了Activity {

private DBTools dbTools = new DBTools(this);
    //later on in this class I do some checks and inserts.

我怀疑某些事情可能是错的,我不熟悉数据库的生命周期,就像我使用它一样。每个onDestroy上都是空白的吗?我是否需要每次在MainActivity中实例化它?如果我在那里实例化了,我是否需要在注册活动中再次实例化它?

2 个答案:

答案 0 :(得分:2)

据我所知,没有。应用程序创建数据库后,将保存该数据库,并通过应用程序关闭和其他生命周期活动保持数据。

如果以编程方式插入/创建数据库条目,那么您只需执行一次。否则,您将获得重复数据。

除非您编写代码来销毁数据库,否则数据库将在那里。

所以,回答你的问题......

Does it go blank on each onDestroy?

不,一旦你插入了条目,它们将永远存在。否则,不建议SQLite用于数据持久性。

Do I need to instantiate it in MainActivity every time?

我通常在我的活动中创建我的db帮助器的全局实例,所以如果我需要运行查询,我将只调用该实例并执行查询。

If I have instantiated it there, do I need to instatiate it yet again in Signup Activity?

你真的不会再次“实例化”数据库,因为一旦你创建它,它就在你的应用程序中。在“注册活动”中创建数据库帮助程序实例只会使该活动能够运行查询。

答案 1 :(得分:2)

只有在更改数据库版本(在超级构造函数调用中传递)或卸载应用程序时,才会重新创建数据库。

如果更改了DB版本,则影响取决于您在onUpgrade()

中的实现