数据库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;
} }
数据库Dao类BaseDao(增删改)的更多相关文章
- 数据库Dao层编增删改查写,数据库事务,数据库升级
数据库事务 有两个特点 1.安全性 情景:正常的转账行为,这个时候如果出现停电等异常,已经扣钱但是没有加钱:这个时候就可用数据库事务解决问题 2.高效性: 使用数据库事务添加享受同数量的数据,对比耗时 ...
- sqlite数据库操作详细介绍 增删改查,游标
sqlite数据库操作详细介绍 增删改查,游标 本文来源于www.ifyao.com禁止转载!www.ifyao.com Source code package com.example ...
- 用泛型创建SqlServerHelper类实现增删改查(一)
使用泛型,可以构建对数据库单表的基本增删改查. 首先有一数据库 Test_SqlServerHelper ,有2表 接下来创建项目,对数据库进行增删改查. 直接贴代码:(SqlServerHelper ...
- 【设计模式】【应用】使用模板方法设计模式、策略模式 处理DAO中的增删改查
原文:使用模板方法设计模式.策略模式 处理DAO中的增删改查 关于模板模式和策略模式参考前面的文章. 分析 在dao中,我们经常要做增删改查操作,如果每个对每个业务对象的操作都写一遍,代码量非常庞大. ...
- 使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理
一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的 ...
- MySQL数据库之表的增删改查
目录 MySQL数据库之表的增删改查 1 引言 2 创建表 3 删除表 4 修改表 5 查看表 6 复制表 MySQL数据库之表的增删改查 1 引言 1.MySQL数据库中,数据库database就是 ...
- Delphi - cxGrid连接Oracle数据库 实现数据的增删改查
cxGrid连接Oracle数据库 实现数据的增删改查 cxGrid连接Oracle数据库 1:通过OraSession连接数据库.OraDataSet实现OraSession和OraDataSour ...
- MVC模式:实现数据库中数据的增删改查功能
*.数据库连接池c3p0,连接mysql数据库: *.Jquery使用,删除时跳出框,确定是否要删除: *.使用EL和JSTL,简化在jsp页面中插入的java语言 1.连接数据库 (1)导入连接数据 ...
- MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)
设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计 ...
随机推荐
- LeetCode::Sort List 具体分析
Sort a linked list in O(n log n) time using constant space complexity. 这道题目非常简短的一句话.给链表排序,看到nlogn.我们 ...
- Java并发—简介与线程创建
程序.进程和线程 程序:一段静态的代码,一组指令的有序集合,不运行的话只是一堆代码. 程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称之为进程.也就是说进程是 ...
- Python基础(7)_闭包函数、装饰器
一.闭包函数 闭包函数:1.函数内部定义函数,成为内部函数, 2.改内部函数包含对外部作用域,而不是对全局作用域名字的引用那么该内部函数成为闭包函数 #最简单的无参闭包函数 def func1() n ...
- PAT 天梯赛 L1-040. 最佳情侣身高差 【水】
题目链接 https://www.patest.cn/contests/gplt/L1-040 AC代码 #include <iostream> #include <cstdio&g ...
- 【转】Linux下查看进程打开的文件句柄数
---查看系统默认的最大文件句柄数,系统默认是1024 # ulimit -n 1024 ----查看当前进程打开了多少句柄数 # lsof -n|awk '{print $2}'|sort|uniq ...
- iOS 学习@autoreleasepool{}
" ojc-c 是通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,以后每当碰到有al ...
- 【HackerRank】Median
题目链接:Median 做了整整一天T_T 尝试了各种方法: 首先看了解答,可以用multiset,但是发现java不支持: 然后想起来用堆,这个基本思想其实很巧妙的,就是维护一个最大堆和最小堆,最大 ...
- Django---media静态文件的配置&全局变量
media 静态文件配置 static 静态文件多用于存放用于渲染前端页面的相关数据,media用于存放客户上传或其他的文件 setting.py 中加入路径 MEDIA_ROOT = ( os.pa ...
- HTML5模拟衣服撕扯动画
在线演示 本地下载
- OWASP十大攻击类型详解
随着WEB应用技术的不断进步与发展,WEB应用程序承载了越来越多的业务,而随之而来的也是WEB应用所面临的越来越复杂的安全问题.而WEB日志作为WEB安全中的一个重要组成部分,不但可在事后起到追踪和溯 ...