数据库Dao类BaseDao(增删改)

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;
    }

}

 

posted on 2016-04-12 14:21  Z2  阅读(2094)  评论(0编辑  收藏  举报

导航