面向对象的Android数据库类结构

面向对象的Android数据库类结构,android,oop,sqlite,Android,Oop,Sqlite,我一直在关注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 = "m

我一直在关注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对象?如何轻松地引入更多具有相同CRUD操作的对象?

我建议使用具有合同的内容提供商,这将为您提供访问数据和执行CRUD操作的标准方法。然后,数据库助手只需设置表并填充任何默认数据

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


内容提供商也为您提供了很多功能,例如链接到加载程序,这样您就可以根据绑定到内容提供商的列表视图自动刷新列表视图,并“侦听”底层数据源的更改。

Ahah。我希望我不会被拖到内容提供商那里,因为他们(对我来说)非常重要,而且在谷歌文档中,他们主要用于访问来自外部潜在客户(即应用程序外部)的数据。我想我会开始留意的。你知道这种方法的好的/容易理解的读物吗那看起来不错。此外,如果您曾经希望通过同步适配器实现同步,则需要内容提供商访问您的数据,因此如果这适用于您,那么在时间上可能不是一项糟糕的投资。