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

数据库Dao类BaseDao(增删改)的更多相关文章

  1. 数据库Dao层编增删改查写,数据库事务,数据库升级

    数据库事务 有两个特点 1.安全性 情景:正常的转账行为,这个时候如果出现停电等异常,已经扣钱但是没有加钱:这个时候就可用数据库事务解决问题 2.高效性: 使用数据库事务添加享受同数量的数据,对比耗时 ...

  2. sqlite数据库操作详细介绍 增删改查,游标

    sqlite数据库操作详细介绍 增删改查,游标     本文来源于www.ifyao.com禁止转载!www.ifyao.com Source code     package com.example ...

  3. 用泛型创建SqlServerHelper类实现增删改查(一)

    使用泛型,可以构建对数据库单表的基本增删改查. 首先有一数据库 Test_SqlServerHelper ,有2表 接下来创建项目,对数据库进行增删改查. 直接贴代码:(SqlServerHelper ...

  4. 【设计模式】【应用】使用模板方法设计模式、策略模式 处理DAO中的增删改查

    原文:使用模板方法设计模式.策略模式 处理DAO中的增删改查 关于模板模式和策略模式参考前面的文章. 分析 在dao中,我们经常要做增删改查操作,如果每个对每个业务对象的操作都写一遍,代码量非常庞大. ...

  5. 使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理

    一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的 ...

  6. MySQL数据库之表的增删改查

    目录 MySQL数据库之表的增删改查 1 引言 2 创建表 3 删除表 4 修改表 5 查看表 6 复制表 MySQL数据库之表的增删改查 1 引言 1.MySQL数据库中,数据库database就是 ...

  7. Delphi - cxGrid连接Oracle数据库 实现数据的增删改查

    cxGrid连接Oracle数据库 实现数据的增删改查 cxGrid连接Oracle数据库 1:通过OraSession连接数据库.OraDataSet实现OraSession和OraDataSour ...

  8. MVC模式:实现数据库中数据的增删改查功能

    *.数据库连接池c3p0,连接mysql数据库: *.Jquery使用,删除时跳出框,确定是否要删除: *.使用EL和JSTL,简化在jsp页面中插入的java语言 1.连接数据库 (1)导入连接数据 ...

  9. MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)

    设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计 ...

随机推荐

  1. 1、hive安装详细步骤

    一.环境准备 hadoop-2.7.2 java 1.7.0 apache-hive-1.2.1 mysql Hive配置文件介绍 •hive-site.xml      hive的配置文件 •hiv ...

  2. app开发流程有哪些

    app开发流程是需求方和供求方相互协调的过程,一般分为需求分析.功能设计.功能实现.项目测试.上线等几个步骤,下面我们就来一起看看ytkah团队进行app开发各个流程主要做哪些事情,让您对app开发设 ...

  3. 017-Spring Boot AOP

    一.概述 面向切面编程,将业务代码与处理琐碎相关度少的代码隔离开.以便达到重用,解耦. 用途:日志记录.权限处理.性能统计.监控.事务处理.异常处理等 通知类型有:前置通知.后置最终通知.后置返回通知 ...

  4. 剑指offer 面试4题

    面试4题: 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 解题代码一:二 ...

  5. EasyMock 常见异常

    1. java.lang.IllegalStateException: calling verify is not allowed in record state 含义:不允许在记录状态(record ...

  6. 以太网100Mhz频率为什么可以达到带宽1000Mbps

    转: https://wenku.baidu.com/view/353ea8ecb0717fd5370cdc0b.html

  7. STM32F4XX高效驱动篇2 I2C

    说到I2C很多用过STMF10X硬件I2C方式的工程师,都感觉有点头痛.大部分还是使用软件模拟的方式,I2C由于一般的工作频率是400,100KHz.所以在平凡读取,或所读数据量大时,使用这模拟的方式 ...

  8. spring boot未配置数据源报错

    我拷贝了一个springboot 项目,然后去掉了数据源配置启动报错 : Cannot determine embedded database driver class for database ty ...

  9. canvas 视频音乐播放器

    canvas 视频音乐播放器 var play_nor_img_path = 'images/play_btn_n.png'; //播放按钮 正常时 60x60 px var play_sec_img ...

  10. OC_id类型

     博客正式开通啦!以后会每天为大家更新知识,将过去学习的笔记发布出来.供大家学习交流. 在Objective-C 中,id 类型是一个独特的数据类型.在概念上,类似Java 的Object 类,可以转 ...