Android - 数据库类结构OOP

时间:2014-01-22 12:52:37

标签: 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 = "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并覆盖了DatabaseHelperonCreate方法,这些方法与它们完全相同。

我的问题,最后,是如何重新组织和重新构建上述设计,以便我可以在餐厅桌或用户上执行onUpdate操作表? DatabaseHelper在哪里?我如何在每个对象中引用DatabaseHelper对象?如何轻松引入更多可以具有相同CRUD操作的对象?

1 个答案:

答案 0 :(得分:1)

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

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

内容提供商也为您提供了很多帮助,例如链接到加载器,因此您可以根据绑定到内容提供程序的内容自动刷新列表视图,并“监听”基础数据源的更改。