我一直在关注YouTube上一位叫Prakeesh的绅士的教程,其中他解释了如何在Android中的数据库上执行CRUD操作。
到目前为止,我有以下代码可以正常工作:
public class DataHandler {
public static final String NAME = "name";
public static final String TABLE_NAME = "mytable";
public static final String DATABASE_NAME = "mydatabase";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_CREATE = "create table " + TABLE_NAME + " (" + NAME + " text not null);";
SQLiteDatabase database;
DatabaseHelper databaseHelper;
Context context;
public DataHandler(Context context) {
this.context = context;
databaseHelper = new DatabaseHelper(context);
}
public DatabaseHelper open(){
database = databaseHelper.getWritableDatabase();
return databaseHelper;
}
public void close(){
databaseHelper.close();
}
public long insert(String text){
ContentValues contentValues = new ContentValues();
contentValues.put(NAME, text);
return database.insert(TABLE_NAME, null, contentValues);
}
public Cursor returnData(){
return database.query(TABLE_NAME, new String[] {NAME}, null, null, null, null, NAME);
}
// Database Helper Class
private static class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(sqLiteDatabase);
}
}
}
总而言之,以上内容包含一个
DataHandler
类,该类包含数据库Schema
,即数据库名称,我的表名(仅一个表),数据库版本等。此类包含CRUD
方法和一个初始化构造函数。 DatabaseHelper
对象。DatabaseHelper
对象是一个内部类,该类扩展了SQLiteOpenHelper并覆盖了onCreate
和onUpdate
方法,它们的用法完全相同。最后,我的问题是如何重新组织和重新组织上述设计,以便可以在例如餐厅表或用户表上执行
CRUD
操作? DatabaseHelper会坐在哪里?如何在每个对象中引用DatabaseHelper对象?如何轻松引入更多具有相同CRUD操作的对象? 最佳答案
我建议您使用带有合同的内容提供程序,这样可以为您提供访问数据和执行原始操作的标准方法。然后,您的数据库助手将只进行表的设置并填充所有默认数据。
合同定义了模型对象,然后内容提供者可以从上面的抽象层从数据库中插入,更新和删除这些对象。
内容提供程序还为您提供了很多功能,例如与加载程序链接,因此您可以基于绑定到内容提供程序的列表视图自动刷新列表视图,并“侦听”基础数据源的更改。
关于android - Android-数据库类结构OOP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21283502/