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