zoukankan      html  css  js  c++  java
  • 数据库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;
        }
    
    }
  • 相关阅读:
    元素模式
    完美C++(第5版)(双色)
    ASP.NET Web API 2框架揭秘
    跨终端 Web
    WebKit技术内幕
    云计算时代——本质、技术、创新、战略
    互联网创业密码
    Netty权威指南
    Robot Framework 学习笔记(二)-------第一个脚本
    Robot Framework学习笔记(一)------环境搭建
  • 原文地址:https://www.cnblogs.com/zzw1994/p/5382526.html
Copyright © 2011-2022 走看看