gpt4 book ai didi

Android - 数据库类结构 OOP

转载 作者:行者123 更新时间:2023-11-30 03:09:10 25 4
gpt4 key购买 nike

我一直在关注 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 并覆盖了 onCreateonUpdate 方法,它们完全按照他们说的做。

我的问题,最后,是如何重新组织和重新构建上述设计,以便我可以对例如餐厅餐 table 执行CRUD 操作还是用户表? DatabaseHelper 应该放在哪里?我将如何在每个对象中引用 DatabaseHelper 对象?我怎样才能轻松地引入更多可以具有相同 CRUD 操作的对象?

最佳答案

我建议使用带有契约(Contract)的内容提供者,这将为您提供一种访问数据和执行 crud 操作的标准方法。然后,您的数据库助手将只设置表并填充任何默认数据。

合约定义了模型对象,然后内容提供者可以从上面的抽象层向数据库插入、更新和删除这些对象。

Content provider 也给了你很多东西,比如与加载器链接,这样你就可以根据它绑定(bind)到 content provider 并“监听”底层数据源的变化来自动刷新 ListView 。

关于Android - 数据库类结构 OOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21283502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com