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. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  2. PAT 天梯赛 L1-006. 连续因子 【循环】

    题目链接 https://www.patest.cn/contests/gplt/L1-006 思路 输出的连续因子 的乘积 也要是这个数的因子 就每个数先找它的单因子 然后每个单因子往上一个一个遍历 ...

  3. iOS 学习@autoreleasepool{}

    " ojc-c 是通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,以后每当碰到有al ...

  4. 转:APDU命令格式

    CLA    INS  P1  P2  Lc  Data  Le 其中CLA为指令类别:INS为指令码:P1.P2为参数:Lc为Data的长度:Le为希望响应时回答的数据字节数,0表最大可能长度. 一 ...

  5. linux基础四----samba&&nginx

    一 samba 1环境配置: a.确保linux下防火墙关闭比或开放共享目录权限 iPtables -F b.确保setlinux关闭:setenforce 0 c.配置iP 2安装软件包:yum i ...

  6. HNOI2019梦游记

    \(Day_0\) 十点半开始睡觉,开始了八个小时的不眠之夜,整晚都没睡着,这状态明天肯定挂了 \(Day_1\) 开局一条鱼,计算几何只会\(20\) 还是\(T2\)的\(20\)纯暴力好打,\( ...

  7. 20145230 《Java程序设计》第8周学习总结

    20145230 <Java程序设计>第8周学习总结 教材学习内容 NIO与NIO2 NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以设定缓冲区(Buffer)容量 ...

  8. Java Interface接口

    Java 中接口概念 接口可以理解为一种特殊的 类,由 全局常量 和 公共的抽象方法 所组成. 类是一种具体实现体,而接口定义了某一批类所需要遵循的规范,接口不关心这些类的内部数据, 也不关心这些类里 ...

  9. centos6 多段Ip添加脚本

    #!/bin/bash export device=`ifconfig|grep eth0|head -n 1|awk '{print ($1)}'`export ipcfg_pre="/e ...

  10. 多版本python的使用

    装任一版本的virtualenv都可以 在创建virtualenv时只需指定python的安装位置就可使用该版本的python virtualenv --python=D:\install\pytho ...