我一直在关注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
,即数据库名称,我的表名(只有一个表),数据库版本等。此类包含{{ 1}}方法和初始化CRUD
对象的构造函数。
DatabaseHelper
对象是一个内部类,它扩展了SQLiteOpenHelper并覆盖了DatabaseHelper
和onCreate
方法,这些方法与它们完全相同。
我的问题,最后,是如何重新组织和重新构建上述设计,以便我可以在餐厅桌或用户上执行onUpdate
操作表? DatabaseHelper在哪里?我如何在每个对象中引用DatabaseHelper对象?如何轻松引入更多可以具有相同CRUD操作的对象?
答案 0 :(得分:1)
我建议使用带有合同的内容提供商,然后为您提供访问数据和执行crud操作的标准方法。然后,您的数据库帮助程序将只进行表的设置并填充任何默认数据。
合同定义了模型对象,然后内容提供者可以从上面的抽象层插入,更新和删除数据库中的这些对象。
内容提供商也为您提供了很多帮助,例如链接到加载器,因此您可以根据绑定到内容提供程序的内容自动刷新列表视图,并“监听”基础数据源的更改。