Tôi có một câu hỏi newbie về cơ sở dữ liệu SQLite trong Android:Tôi có cần phải gọi getWritableDatabase() mỗi khi thao tác dữ liệu
Tôi có thực sự cần phải lấy một cơ sở dữ liệu có khả năng ghi mọi Tôi thao tác dữ liệu?
Vì vậy, tôi có thể viết một DAO như thế này:
class Dao {
private final SQLiteDatabase database;
public Dao(SQLiteOpenHelper databaseHelper){
database = databaseHelper.getWritableDatabase();
}
public void insert(...){
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
ContentValues cv = new ContentValues(4);
database.update(....);
}
}
hay tôi phải viết dao của tôi như thế này:
class Dao {
private final SQLiteOpenHelper databaseHelper;
public Dao(SQLiteOpenHelper databaseHelper){
this.databaseHelper = databaseHelper
}
public void insert(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
}
}
Nếu cách tiếp cận thứ hai là đúng nhất: làm tôi cũng cần phải đóng cơ sở dữ liệu sau mỗi hoạt động:
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
database.close();
}
Tôi đoán tương tự cho databaseHelper.getReadableDatabase()
phải không?
Tôi không muốn làm điều đó trong mọi Hoạt động. Vì vậy, tôi sẽ phân lớp ứng dụng và thực hiện ở đó một cái gì đó như một singleton, để đảm bảo rằng Dao (cụ thể hơn SQLiteOpenHelper) được instantiated chỉ một lần – sockeqwe
@sockeqwe: Bạn _could_ đặt nó trong ứng dụng của bạn như là một tĩnh, nhưng đó thường được coi là thực hành xấu . Nó cũng sẽ làm cho các hoạt động thử nghiệm khó khăn hơn. Nhưng nếu bạn không quan tâm đến thực hành tốt hay thử nghiệm mã chính thức, thì vâng, điều đó có thể hoạt động. Chỉ cần đảm bảo rằng mã của bạn không bao giờ đóng kết nối; nếu không nó sẽ không được rõ ràng lý do tại sao một số hoạt động không nhận được một kết nối liên tục. (Đó là một trong những lý do tại sao nó thực hành xấu.) –