我打算编写一个需要数据库的应用程序。 我将需要四个表,每个表将维护应用程序的一个屏幕的信息。 我的问题是,我可以创建一个数据库帮助程序类并将所有表放在其中,或者我应该创建4个不同的帮助程序类,并将每个表放在一个单独的类中。 它有什么不同吗? 感谢
答案 0 :(得分:1)
我可以创建一个数据库助手类
是。一个就够了。另外,请考虑将DatabaseHelper
设为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();
}
}
答案 1 :(得分: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;
}
}
然后从任何actvitiy你可以通过myDatabase.getInstance()
获得它