我将编写一个需要数据库的应用程序。我将需要四个表,每个表都将维护应用程序一个屏幕的信息。我的问题是我可以创建一个数据库助手类并将所有表放入其中,还是应该创建 4 个不同的助手类并将每个表放在一个单独的类中。有什么区别吗?谢谢
问问题
85 次
2 回答
1
我可以创建一个数据库助手类吗
是的。一个就够了。也考虑让你的DatabaseHelper
as Singleton
。
将所有表格放入其中,或者我应该创建 4 个不同的辅助类并将每个表格放在一个单独的类中
就像我在上面写的那样,您会将所有表格归为一类。
有什么区别吗?
结果是一样的,但不同的是我猜你写的代码更少,你总是有一个 Helper 实例,代码会更干净,可读性更好。
想象一下某个商业公司拥有包含 20 个表的大型数据库。仍然公司只有一个数据库。
您可以将其想象SQLiteOpenHelper
为一个大型数据库(它包含所有必需的逻辑)。因此,创建 4 个不同的类,每个类包含一个表是不合逻辑的。就像您将有 4 个数据库和一张表。
我的建议:
是创建一个通用DatabaseHelper
的,它将包装所有必需的逻辑,然后为了实现干净且有效的解决方案,您可以创建四个将为CRUD
每个表实现操作的类。
例子:
public class UserTools {
private SQLiteOpenHelper handler;
private SQLiteDatabase db;
public UserTools(SQLiteOpenHelper handler) {
this.handler = handler;
}
public void insert(<data>) { ... }
public void update(<data>) { ... }
public void delete(<data>) { ... }
public List<DataType> getAll() { ... }
public DataType getObject(<data>) { ... }
private final synchronized SQLiteDatabase openWrite(SQLiteOpenHelper handler) {
return handler.getWritableDatabase();
}
private final synchronized SQLiteDatabase openRead(SQLiteOpenHelper handler) {
return handler.getReadableDatabase();
}
}
于 2013-03-17T22:55:19.007 回答
0
您可以创建一个数据库助手类,并在应用程序的某处对其进行初始化,然后在您的活动中传递它。
您可以像这样为每个表创建一个类:
public class CartTable {
// database table
public static final String TABLE_CART = "cart";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_CART_GROCERY_ID = "cart_grocery_id"; // this is grocery_id
public static final String COLUMN_CART_GROCERY_NAME = "cart_grocery_name";
// database creation SQL statement
public static final String DATABASE_CREATE = "create table "
+ TABLE_CART
+ "(" + COLUMN_ID + " integer primary key autoincrement, "
+ COLUMN_CART_GROCERY_ID + " integer unique, "
+ COLUMN_CART_GROCERY_NAME + " text);";
public static void onCreate(SQLiteDatabase database) {
database.execSQL(DATABASE_CREATE);
}
public static void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
Log.w(CategoryTable.class.getName(), "Upgrading database from version "
+ oldVersion + " to " + newVersion
+ ", which will destroy all old data");
database.execSQL("DROP TABLE IF EXISTS " + TABLE_CART);
onCreate(database);
}
}
并创建一个在 onCreate 中执行类似操作的数据库助手类:
class myDatabaseHelper extends SQLiteOpenHelper{
@Override
public void onCreate(SQLiteDatabase db) {
CartTable.onCreate(db);
}
//.....get read/write database methods etc
}
最后,创建一个单例类来创建和维护它的一个实例
class myDatabase{
private static MyDatabaseHelper myDatabaseHelper;
public static MyDatabaseHelper getInstance(){
if (myDatabaseHelper == null)
myDatabaseHelper = new MyDatabaseHelper();
return myDatabaseHelper;
}
}
然后从任何活动中,您都可以通过 myDatabase.getInstance()
于 2013-03-17T22:58:26.137 回答