0

我有一个正在开发的应用程序,我想知道当我关闭我的应用程序并重新启动它时我的数据库会发生什么,因为我从未指定 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);

然后用户转到注册活动,然后:

公共类注册扩展活动{

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

我怀疑可能有问题,而且我不熟悉数据库的生命周期,就像我使用它的方式一样。每次 onDestroy 都会变成空白吗?我每次都需要在 MainActivity 中实例化它吗?如果我在那里实例化了它,我是否需要在注册活动中再次实例化它?

4

2 回答 2

2

据我所知,没有。一旦应用程序创建了数据库,该数据库就会被保存,并且它的数据会在应用程序关闭和其他生命周期活动中持续存在。

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

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

所以,回答你的问题..

Does it go blank on each onDestroy?

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

Do I need to instantiate it in MainActivity every time?

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

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

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

于 2013-10-06T13:15:00.290 回答
2

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

如果数据库版本发生变化,影响取决于您在 onUpgrade() 中的实现

于 2013-10-06T13:23:25.580 回答