Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 每次启动应用程序时是否都会重新创建SQLite数据库?_Android_Sqlite - Fatal编程技术网

Android 每次启动应用程序时是否都会重新创建SQLite数据库?

Android 每次启动应用程序时是否都会重新创建SQLite数据库?,android,sqlite,Android,Sqlite,我有一个我正在使用的应用程序,我想知道当我关闭应用程序并重新启动它时,我的数据库会发生什么情况,因为我从不指定onPause、onResume和onDestroy上会发生什么(因为我不知道在那里指定什么) 这是我的DBTools课程 public class DBTools extends SQLiteOpenHelper { public DBTools(Context applicationcontext) { super(applicationcontext, "

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

}
下面是我如何使用它的

在主要活动中:

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中实例化它?如果我在那里实例化了它,我是否需要在注册活动中再次实例化它?

据我所知,不。一旦应用程序创建了d数据库,该数据库被保存,其数据通过应用程序关闭和其他生命周期活动保持不变

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

除非你写一个代码来破坏数据库,否则不,数据库会在那里

所以,来回答你的问题

是否在每个onDestroy上都变为空白?

不,一旦插入条目,它们将永远存在。否则,不建议使用SQLite进行数据持久化

是否每次都需要在MainActivity中实例化它?

我通常在活动中创建db helper的全局实例,因此如果需要运行查询,我只需调用该实例并执行查询

如果我在那里实例化了它,我是否需要在注册活动中再次实例化它?


你真的不“实例化”数据库一经创建,就在应用程序中。在注册活动中创建db helper的实例只会使该活动能够运行查询。

据我所知,不会。一旦应用程序创建了数据库,该数据库就会保存,其数据会通过应用程序关闭和其他操作保持不变生命周期活动

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

除非你写一个代码来破坏数据库,否则不,数据库会在那里

所以,来回答你的问题

是否在每个onDestroy上都变为空白?

不,一旦插入条目,它们将永远存在。否则,不建议使用SQLite进行数据持久化

是否每次都需要在MainActivity中实例化它?

我通常在活动中创建db helper的全局实例,因此如果需要运行查询,我只需调用该实例并执行查询

如果我在那里实例化了它,我是否需要在注册活动中再次实例化它?


你真的不需要重新“实例化”数据库,因为一旦你创建了数据库,它就会出现在你的应用程序中。在注册活动中创建一个db helper的实例只会使该活动能够运行查询。

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


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

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


如果更改了DB版本,影响取决于您在onUpgrade()中的实现

是。重新安装应用程序将删除db数据。如果我已在MainActivity中实例化了它,是否需要在注册活动中再次实例化它?如果你计划在注册活动中插入数据,则需要。但是如果你不在注册活动中执行任何db操作,则不需要。在MainActivity中实例化你的db将创建db供应用程序使用。这意味着所有活动都可以使用该db。如果使用adb重新安装选项,则不会删除db。只有手动卸载然后再次安装应用程序,才会删除db。是的。重新安装应用程序将删除db数据。如果我已在MainActivity中实例化它,是否需要在Signu中再次安装它p活动?如果您计划在注册活动中插入数据,则是。但如果您不在注册活动中执行任何db操作,则无需。在MainActivity中实例化您的db将创建应用程序要使用的db。这意味着所有活动都可以使用该db。如果您使用adb重新安装选项,则不会删除db。db是rem仅当您手动卸载并再次安装应用程序时,OVE才会被删除。