具有多表sqlite数据库的类的模式或示例

时间:2015-02-15 02:48:11

标签: android mysql database sqlite

我正在使用数据库持续增长的Android应用程序。

为了帮助我的数据库,我有一个MySQLIteHelper类,它扩展了SQLiteOpenHelper并包含用于定义表的字符串。我有一个dbDataSource类来处理数据库行的添加,删除,读取和写入。还有一个名为dbDataRow的类,它充当一行数据。

当表包含两个具有相同名称(ID和Name)的列时,这些类工作正常,因为dbDataSource中的方法通常需要表名,并且表名在dbDataRow中是可变的。但是现在这些表包含不同数量的具有不同名称的列,我目前正在尝试决定是否应该复制dbDataSource和dbDataRow类(每个表一个)或者弄清楚如何使它们非常适用不同的表格

我正在为应用内的多个数据库寻找数据访问类的模式或示例。

我不确定实际代码是否会对此问题有所帮助,但请告诉我您希望我包含哪些内容(如果有的话)。谢谢你的帮助!

编辑:下面是一些代码 - 注意,我将dbDataRow的名称更改为dbData。您可以在CursorToDB_Row中看到,需要将列显式输入到dbData中。如果两个表中的列非常不同,这将无法工作......

public class dbData {

    private long id;
    private String dbData;

    private String myTable;


    // Will be used by the ArrayAdapter in the ListView
    @Override
    public String toString() {
        return dbData;
    }

    public String getName() {
        return dbData;
    }

    public void setDbData(String dbData) {
        this.dbData = dbData;
    }

    public void setTable(String myTable){
        this.myTable = myTable;
    }

    public String getTable(){
        return myTable;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getDbData() {
        return dbData;
    }


}




public class dbDataSource {

    // Database fields
    private SQLiteDatabase database;
    private MySQLiteHelper dbHelper;
    private String[] allColumns = { MySQLiteHelper.dbFields.COLUMN_SPECIAL_DAYS_ID,
            MySQLiteHelper.dbFields.COLUMN_SPECIAL_DAYS_NAME };

    public dbDataSource(Context context) {
        dbHelper = new MySQLiteHelper(context);
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    //Creates an DB entry by table name, a column, value for column, and the ID column, which it will
    //populate automatically
    public dbData createDB_Row(String comment, String myTable, String myColumn, String myIDColumn) {
        ContentValues values = new ContentValues();
        values.put(myColumn, comment);
        long insertId = database.insert(myTable, null, values);
        Cursor cursor = database.query(myTable,
                allColumns, myIDColumn + " = " + insertId, null,
                null, null, null);
        cursor.moveToFirst();
            dbData newDbData = cursorToDB_Row(cursor);
        cursor.close();
        return newDbData;
    }

    //Deletes a DB entry by dbData, table name, and the ID column.
    public void deleteDB_Row(dbData dbData, String myTable, String myIDColumn) {
        long id = dbData.getId();
        System.out.println("dbData deleted with id: " + id);
        database.delete(myTable, myIDColumn + " = " + id, null);
    }


    //assumes ID is column 0 and the main string (usually name) is 1
    private dbData cursorToDB_Row(Cursor cursor) {
        dbData dbData = new dbData();
        dbData.setId(cursor.getLong(0));
        dbData.setDbData(cursor.getString(1));
        return dbData;
    }


}

0 个答案:

没有答案