Android 如何用多个DAO类实现SQLiteOpenHelper
我正试图找出如何在我的Android应用程序中最好地实现SQLite数据库。来自answer的建议建议使用SQLiteOPenHelper,我已经有了,但建议只使用一个实例 在我的应用程序中,我有一个抽象的BaseDAO类,它扩展了SQLiteOpenHelper,并在必要时创建数据库表。例如:Android 如何用多个DAO类实现SQLiteOpenHelper,android,sqlite,singleton,composition,sqliteopenhelper,Android,Sqlite,Singleton,Composition,Sqliteopenhelper,我正试图找出如何在我的Android应用程序中最好地实现SQLite数据库。来自answer的建议建议使用SQLiteOPenHelper,我已经有了,但建议只使用一个实例 在我的应用程序中,我有一个抽象的BaseDAO类,它扩展了SQLiteOpenHelper,并在必要时创建数据库表。例如: public abstract class BaseDAO extends SQLiteOpenHelper{ public BaseDAO(Context context, String
public abstract class BaseDAO extends SQLiteOpenHelper{
public BaseDAO(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE " + ...
db.execSQL(CREATE_TABLE);
}
我还设置了其他DAO类来访问数据库,它们都扩展了这个BaseDAO类,例如,用于将消息对象放入数据库的MessageDAO类
public class MessageDAO extends BaseDAO {
public MessageDAO(Context context) {
super(context, DBContract.DB_NAME, null, DBContract.DB_VERSION);
}
public long addMessage(Message msg) throws Exception {
ContentValues values = new ContentValues();
values.put(DBContract.MessagesTable.COLUMN_TEXT, msg.getText());
values.put(DBContract.MessagesTable.COLUMN_FILE, msg.getFile());
values.put(DBContract.MessagesTable.COLUMN_TYPE, msg.getType());
values.put(DBContract.MessagesTable.COLUMN_TIMESTAMP, msg.getTimeStamp());
SQLiteDatabase db = this.getWritableDatabase();
long rowId = db.insert(DBContract.MessagesTable.TABLE_NAME, null, values);
db.close();
if (!(rowId > 0)) {
throw new Exception("Error inserting message into DB");
}else{
return rowId;
}
}
}
以及一个ContactDAO类,用于将联系人对象放入数据库:
public class ContactDAO extends BaseDAO {
public ContactDAO(Context context) {
super(context, DBContract.DB_NAME, null, DBContract.DB_VERSION);
}
public long addContact(Contact contact) throws Exception {
ContentValues values = new ContentValues();
values.put(DBContract.ContactTable._ID, contact.getId());
values.put(DBContract.ContactTable.COLUMN_CONTACT_NAME, contact.getContactName());
values.put(DBContract.ContactTable.COLUMN_CONTACT_TYPE, contact.getContactType());
SQLiteDatabase db = this.getWritableDatabase();
long rowId = db.insert(DBContract.ContactTable.TABLE_NAME, null, values);
db.close();
if (rowId <= 0) {
throw new Exception("Error inserting contact into DB");
} else {
return rowId;
}
}
}
我的问题是:我应该重构它,以便将我的所有DAO类放在一个类中,并使该类成为一个单独的类,还是这种设置通常可以?很难在网上找到正确的信息,因为Android中似乎有多种处理db的方法。太多OOP了。没有理由认为所有DAO类都应该派生自OpenHelperClass DAO类或多或少与表对应,因此DAO类与数据库对象之间存在N:1关系。 这意味着DAO类应该使用OpenHelper类的公共实例,或者所有内容都应该放在一个类中,但您可能不希望这样