SQLite用于存储一些数据量较多,结构比较复杂情况,使用的时候只需要实现SQLiteOpenHelper,在onCreate创建数据表,onUpgrade做升级处理
通过Helper实例对DB进行数据处理,例如,database = dbHelper.getWritableDatabase(); 获取DB对象进行插入,更新,删除操作,dbHelper.getReadableDatabase()
进行数据查询,在此不必多说,这样实现一个数据库并不复杂,但是对不同对象存储操作还需要分别各自去自己实现,比较麻烦,能不能用一种通用设计实现呢?
其实存入DB内的数据都是要分隔成基本String, int , long, double等,在android中可以使用数据集ContentValues进行存储,ContentValues可以存储基本类型,类似于Map
ContentValues是可直接用于SQLiteDatabase,ContentProvider中进行批量处理,这是android为此设计的,在SQLiteDatabase我们使用ContentValues是非常简单的。
好了下面我们需要对通用数据操作定义一种规则,我们只需要传入tableName,whereArgs(筛选条件),ContentValues即可实现insert, quere,delete,update功能
接口定义如下:
public interface IDBDelegate {
public boolean insertData(String tableName,String nullColumnHack,ContentValues values);
public boolean deleteData(String tableName,String whereClause, String[] whereArgs);
public boolean updateData(String tableName,ContentValues values, String whereClause, String[] whereArgs);
//查询单条数据集
public Map<String, String> getRowData(String tableName, String selection, String[] selectionArgs);
//查询多条数据集
public List<Map<String, String>> getListData(String tableName, String selection, String[] selectionArgs);
}
实现类
public class DBDelegateImpl implements IDBDelegate{
private final Object obj=new Object();
private DBHelper dbHelper=null;
public DBDelegateImpl(Context context) {
dbHelper=DBHelper.getInstance(context);
}
@Override
public boolean insertData(String tableName, String nullColumnHack,ContentValues values) {
synchronized (obj) {
boolean flag = false;
SQLiteDatabase database = null;
long id = -1;
try {
database = dbHelper.getWritableDatabase();
id = database.insert(tableName, nullColumnHack, values);
flag = (id != -1);
} catch (SQLException e) {
e.printStackTrace();
} finally {