package com.changim.patient.app.db; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import com.changim.patient.app.entity.BaseEntity; import java.lang.reflect.Field; import java.util.List; /** * 数据库操作基类 * * @author : yangxuzhong * @date : 2016-03-24 10:01 */ public class BaseDao { protected final String TAG = "DAO"; protected Context context; protected DBHelper dbHelper; public BaseDao(Context context) { this.context = context; dbHelper = new DBHelper(context); } public boolean insert(BaseEntity obj) { if (obj == null) { Log.d(TAG, "插入对象为空或者没有参数传入"); return false; } //获得一个操作Sqlite数据库对象 SQLiteDatabase db = dbHelper.getWritableDatabase(); try { ContentValues contentValues = new ContentValues(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String key = field.getName(); String value = field.get(obj) == null ? "" : field.get(obj).toString(); contentValues.put(key, value); } String tableName = obj.getClass().getSimpleName(); Log.d(TAG, "插入表" + tableName + ":[" + contentValues.toString() + "]"); long ret = db.insert(tableName, null, contentValues); Log.d(TAG, String.format("受影响条数:%d, %s", ret, ret > 0 ? ",插入成功" : ",插入失败")); return ret > 0; } catch (IllegalAccessException e) { e.printStackTrace(); Log.d(TAG, "插入时出现错误!"); } finally { db.close(); } return false; } public boolean insert(List<? extends BaseEntity> list) { if (list != null && list.isEmpty()) { Log.d(TAG, "没有要插入的数据"); return false; } //获得一个操作Sqlite数据库对象 SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); try { long ret = 0; for (Object obj : list) { String tableName = obj.getClass().getSimpleName(); ContentValues contentValues = new ContentValues(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String key = field.getName(); String value = field.get(obj) == null ? "" : field.get(obj).toString(); contentValues.put(key, value); } Log.d(TAG, "插入表" + tableName + ":[" + contentValues.toString() + "]"); ret = db.insert(tableName, null, contentValues); } db.setTransactionSuccessful();//事务成功标志 Log.d(TAG, String.format("受影响条数:%d, %s", ret, ret > 0 ? ",插入成功" : ",插入失败")); return ret == list.size(); } catch (IllegalAccessException e) { e.printStackTrace(); Log.d(TAG, "插入时出现错误!"); } finally { db.endTransaction(); db.close(); } return false; } /** * 修改 * * @param obj * @param sWhere * @return */ protected boolean update(Object obj, String sWhere, String[] args) { if (obj == null || (sWhere == null && sWhere.length() > 0)) { Log.d(TAG, "修改对象为空或者没有参数传入"); return false; } //获得一个操作Sqlite数据库对象 SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); ContentValues contentValues = new ContentValues(); try { Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String key = field.getName(); String value = field.get(obj) == null ? "" : field.get(obj).toString(); contentValues.put(key, value); } String tableName = obj.getClass().getSimpleName(); Log.d(TAG, "修改表" + tableName + ":[" + contentValues.toString() + "]"); long ret = db.update(tableName, contentValues, sWhere, args); db.setTransactionSuccessful();//事务成功标志 Log.d(TAG, String.format("受影响条数:%d, %s", ret, ret > 0 ? ",修改成功" : ",修改失败")); return ret > 0; } catch (IllegalAccessException e) { e.printStackTrace(); Log.d(TAG, "修改时出现错误!"); } finally { db.endTransaction(); db.close(); } return false; } public boolean update(List<? extends BaseEntity> list, String sWhere, String[] args) { if (list != null && list.isEmpty()) { Log.d(TAG, "没有要修改的数据"); return false; } //获得一个操作Sqlite数据库对象 SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); try { long ret = 0; for (Object obj : list) { String tableName = obj.getClass().getSimpleName(); ContentValues contentValues = new ContentValues(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String key = field.getName(); String value = field.get(obj) == null ? "" : field.get(obj).toString(); contentValues.put(key, value); } Log.d(TAG, "修改表" + tableName + ":[" + contentValues.toString() + "]"); ret = db.update(tableName, contentValues, sWhere, args); } db.setTransactionSuccessful();//事务成功标志 Log.d(TAG, String.format("受影响条数:%d, %s", ret, ret > 0 ? ",修改成功" : ",修改失败")); return ret == list.size(); } catch (IllegalAccessException e) { e.printStackTrace(); Log.d(TAG, "插入时出现错误!"); } finally { db.endTransaction(); db.close(); } return false; } public boolean replace(BaseEntity obj) { if (obj == null) { Log.d(TAG, "更新对象为空或者没有参数传入"); return false; } //获得一个操作Sqlite数据库对象 SQLiteDatabase db = dbHelper.getWritableDatabase(); try { ContentValues contentValues = new ContentValues(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String key = field.getName(); String value = field.get(obj) == null ? "" : field.get(obj).toString(); contentValues.put(key, value); } String tableName = obj.getClass().getSimpleName(); Log.d(TAG, "更新表" + tableName + ":[" + contentValues.toString() + "]"); long ret = db.replace(tableName, null, contentValues); Log.d(TAG, String.format("受影响条数:%d, %s", ret, ret > 0 ? ",更新成功" : ",更新失败")); return ret > 0; } catch (IllegalAccessException e) { e.printStackTrace(); Log.d(TAG, "插入时出现错误!"); } finally { db.close(); } return false; } public boolean replace(List<? extends BaseEntity> list) { if (list != null && list.isEmpty()) { Log.d(TAG, "没有要更新的数据"); return false; } //获得一个操作Sqlite数据库对象 SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); try { long ret = 0; for (Object obj : list) { String tableName = obj.getClass().getSimpleName(); ContentValues contentValues = new ContentValues(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String key = field.getName(); String value = field.get(obj) == null ? "" : field.get(obj).toString(); contentValues.put(key, value); } Log.d(TAG, "更新表" + tableName + ":[" + contentValues.toString() + "]"); ret = db.replace(tableName, null, contentValues); } db.setTransactionSuccessful();//事务成功标志 Log.d(TAG, String.format("受影响条数:%d, %s", ret, ret > 0 ? ",更新成功" : ",更新失败")); return ret == list.size(); } catch (IllegalAccessException e) { e.printStackTrace(); Log.d(TAG, "插入时出现错误!"); } finally { db.endTransaction(); db.close(); } return false; } /** * 删除本地用户表所有数据 */ protected boolean delete(Object obj, String sWhere, String[] args) { if (obj == null) { Log.d(TAG, "修改对象为空或者没有参数传入"); return false; } //获得一个操作Sqlite数据库对象 SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); try { String tableName = obj.getClass().getSimpleName(); Log.d(TAG, "删除表:" + tableName); int ret = db.delete(obj.getClass().getSimpleName(), sWhere, args); db.setTransactionSuccessful();//事务成功标志 Log.d(TAG, String.format("受影响条数:%d, %s", ret, ret > 0 ? ",删除成功" : ",删除失败")); return ret > 0; } catch (Exception e) { e.printStackTrace(); Log.d(TAG, "删除时出现错误!"); } finally { db.endTransaction(); db.close(); } return false; } protected boolean clear(Object obj) { if (obj == null) { Log.d(TAG, "修改对象为空或者没有参数传入"); return false; } //获得一个操作Sqlite数据库对象 SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); try { String tableName = obj.getClass().getSimpleName(); Log.d(TAG, "清除表:" + tableName); db.execSQL(String.format("delete from %s", tableName)); db.setTransactionSuccessful();//事务成功标志 Log.d(TAG, "清除成功"); return true; } catch (Exception e) { e.printStackTrace(); Log.d(TAG, "清除时出现错误!"); } finally { db.endTransaction(); db.close(); } return false; } }