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. Linux中权限管理之sudo权限

    1.suodo的操作对象是系统命令 2.root把本来只能是超级用户执行的命令赋予普通用户执行 3.设置sudo权限 命令:visudo 找到: ## Allow root to run any co ...

  2. 使用nose_parameterized使unitTest实现参数化

    nose-parameterized是一个针对Python单元测试框架实现参数化的扩展 import unittest # from nose_parameterized import paramet ...

  3. qemu-img 的使用

    qemu-img是QEMU的磁盘管理工具,在qemu-kvm源码编译后就会默认编译好qemu-img这个二进制文件.qemu-img也是QEMU/KVM使用过程中一个比较重要的工具,本节对其用法和实践 ...

  4. CentOS7,将文本模式改成图形界面模式

    在以前通过vi /etc/inittab,将3修改成5.但是在centOS7之后将修改的办法换掉了,执行systemctl set-default graphical.target.根据提示进行一步一 ...

  5. Linux基本命令 vim命令(一)

    vim的三种工作模式 命令模式.输入模式和编辑模式的相互转换,如图 命令模式:使用 Vim 编辑文件时,默认处于命令模式.在此模式下,可以使用上.下.左.右键或者 k.j.h.l 命令进行光标移动,还 ...

  6. css背景透明文字不透明

    测试背景透明度为0.3.文字不透明: background-color: #000; /* 一.CSS3的opacity */ opacity: 0.3; /* 兼容浏览器为:firefox,chro ...

  7. 一个可以查询CSS属性兼容性的网站。

    平时遇到CSS属性是不是道理具体兼容哪些网站,就可以直接上这个网站查询啦.http://www.caniuse.com/ 这个是网站地址.  例如查询 inline-block属性兼容性 就可以看到 ...

  8. php数组函数-array_push()

    array_push()函数将一个或多个元素插入数组的末尾(入栈). 提示:可以添加一个或者多个值. 注:即使您的数组有字符串键名,您所添加的元素将是数字键名. array_push(array,va ...

  9. cocos2dx打飞机项目笔记七:各种回调:定时器schedule、普通回调callFunc、菜单回调menu_selector、事件回调event_selector

    各种回调函数的定义: typedef void (CCObject::*SEL_SCHEDULE)(float); typedef void (CCObject::*SEL_CallFunc)(); ...

  10. iOS_KVC与KVO

    目 录: 一.KVC   二.KVO                                                                                   ...