我对OOP有点新意,所以我想知道我是否正确地做事。为了与数据库进行通信,我创建了一个类SQLiteHelper,它可以执行所有常用的操作(onCreate,onUpdate),还可以打开和关闭连接。
这是班级,目前刚刚上台,但会增加更多:
public class SQLiteHelper extends SQLiteOpenHelper{
public static final String DATABASE_NAME = "notebook";
public static final int DATABASE_VERSION = 2;
public static final String TABLE_LIST = "list";
public static final String TABLE_LIST_ID = "_id";
public static final String TABLE_LIST_NAME = "name";
public SQLiteDatabase db;
public SQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table " + TABLE_LIST + "(" + TABLE_LIST_ID
+ " integer primary key autoincrement, " + TABLE_LIST_NAME
+ " text not null);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE_LIST);
onCreate(db);
}
public void open(){
db = getWritableDatabase();
}
public void close(){
db.close();
}
}
接下来,对于每个表格,我将创建一个新类,扩展前一个类和其中我执行与该特定表相关的所有操作。 例如ListSQL:
public class ListSQL extends SQLiteHelper {
public ListSQL(Context context) {
super(context);
}
public void delete(int id) {
open();
db.delete(TABLE_LIST, TABLE_LIST_ID + " = " + id, null);
close();
}
}
我的问题是,在OOP中,这是正确的做事方式吗?特别是在ListSQL中使用open / close方法和db和TABLE变量对我来说有点奇怪吗?
答案 0 :(得分:3)
我总是在onResume()
中打开数据库连接,然后在onPause()
中将其关闭。通过这种方式,数据库始终对每个活动开放。
我在onCreate()
和onDestroy()
中执行此操作的原因是,一旦用户转到其他活动,onCreate()
new activity
将首先调用onDestroy()
旧的活动所以,如果我在onCreate()
以外的地方执行任何操作(例如: - 在我的列表中搜索或更改用户的状态等),它将使应用程序崩溃,原因是 database already closed
< /强>
注意:即使您使用的是SQLiteHelper类,也必须打开和关闭连接。
答案 1 :(得分:0)
根据Android手册,您在使用SQLiteOpenHelper时无需关闭数据库。系统会为你做。
答案 2 :(得分:-3)
正如上面提到的@Dan,如果您使用 SQLiteOpenHelper ,则无需在每次执行读/写操作时打开和关闭数据库。使用数据库的最佳方式是:
在Application基类中声明并初始化 SQLiteHelper 的实例,如下所示:
public class App extends Application {
public static SQLiteHelper db;
@Override
public void onCreate() {
super.onCreate();
db = new SQLiteHelper(getApplicationContext());
db.open();
}
}
在您的活动或您想要使用数据库的任何其他地方,初始化SQLiteHelper对象,如下所示:
SQLiteHelper db = App.db;
然后你可以随意使用数据库,而不必担心打开和关闭它(: