我有一个正在处理的应用程序,我想知道当我关闭我的应用程序并再次启动它时,我的数据库会发生什么,因为我从未指定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中实例化它?如果我在那里实例化了,我是否需要在注册活动中再次实例化它?
答案 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()
中的实现