我正在使用数据库持续增长的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;
}
}