数据库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设计 ...
随机推荐
- IT basic knowledge
LAMP: Linux Apache MySQL PHP URL & URI: 统一资源定位符是统一资源标志符的一个下种.统一资源标志符确定一个资源,而统一资源定位符不但确定一个资源, 而且还 ...
- Summaries On Java
@1:== 和 equals(): ==用于比较引用和比较基本数据类型时具有不同的功能: 比较基本数据类型:如果两个值相同,则结果为true. 比较引用:如果引用指向内存中的同一对象,结果为true( ...
- java FileUtils 文件工具类
package com.sicdt.library.core.utils; import java.io.BufferedInputStream; import java.io.File; impor ...
- 【Tech】CAS RESTful API使用笔记
在被maven,cas,tomcat各种贱人就是矫情的虐了好几天之后,终于跑通了demo,哈哈哈哈哈哈哈~ 在这里详细记录一下,给和我一样连maven都不会的小白一点福利,同时欢迎大神指正. 首先上最 ...
- Qt5.2.1交叉编译,带tslib插件
一: 源码下载地址: 1.1: 平台: 主机:ubuntu 14.04 开发板: cpu arm-cortex-a8,故而我在配置我的qmake.conf的时候填写的为armV7-a QT版本: qt ...
- 基于SSM的单点登陆03
TbUser.java和TbUserExample.java,TbUserMapper.java,TbUserMapper.xml由mybatis框架生成. generatorConfig.xml & ...
- MongoDB快速入门(九)- 投影
MongoDB投影 mongodb投影意义是只选择需要的数据,而不是选择整个一个文档的数据.如果一个文档有5个字段,只需要显示3个,只从中选择3个字段. MongoDB的find()方法,解释了Mon ...
- 如何隐藏tomcat命令窗口
有两种方法: 一.修改tomcat中的文件参数,达到隐藏目的: 引用:TOMCAT_HOME\bin\setclasspath.bat 在文件的底部找到以下内容: set _RUNJAVA=" ...
- maven创建web工程Spring配置文件找不到
使用maven创建web工程,将Spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [ap ...
- RPC与HTTP
一.为什么需要RPC,而不是简单的HTTP接口? RPC(即Remote Procedure Call,远程过程调用),主要是基于TCP/IP协议:而HTTP服务主要是基于HTTP协议的.我们都知道H ...