android 工具类 数据库管理
版权声明:本文为博主原创文章,未经博主同意不得转载。
https://blog.csdn.net/xuduzhoud/article/details/27540301
数据库工具类,优雅的管理android中的sqlite
package csdn.shimiso.eim.db;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/**
* SQLite数据库模板工具类
*
* 该类提供了数据库操作经常使用的增删改查,以及各种复杂条件匹配,分页,排序等操作
*
* @see SQLiteDatabase
*/
public class SQLiteTemplate {
/**
* Default Primary key
*/
protected String mPrimaryKey = "_id";
/**
* DBManager
*/
private DBManager dBManager;
/**
* 是否为一个事务
*/
private boolean isTransaction = false;
/**
* 数据库连接
*/
private SQLiteDatabase dataBase = null;
private SQLiteTemplate() {
}
private SQLiteTemplate(DBManager dBManager, boolean isTransaction) {
this.dBManager = dBManager;
this.isTransaction = isTransaction;
}
/**
* isTransaction 是否属于一个事务 注:一旦isTransaction设为true
* 全部的SQLiteTemplate方法都不会自己主动关闭资源,需在事务成功后手动关闭
*
* @return
*/
public static SQLiteTemplate getInstance(DBManager dBManager,
boolean isTransaction) {
return new SQLiteTemplate(dBManager, isTransaction);
}
/**
* 运行一条sql语句
*
* @param name
* @param tel
*/
public void execSQL(String sql) {
try {
dataBase = dBManager.openDatabase();
dataBase.execSQL(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
}
/**
* 运行一条sql语句
*
* @param name
* @param tel
*/
public void execSQL(String sql, Object[] bindArgs) {
try {
dataBase = dBManager.openDatabase();
dataBase.execSQL(sql, bindArgs);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
}
/**
* 向数据库表中插入一条数据
*
* @param table
* 表名
* @param content
* 字段值
*/
public long insert(String table, ContentValues content) {
try {
dataBase = dBManager.openDatabase();
// insert方法第一參数:数据库表名。第二个參数假设CONTENT为空时则向表中插入一个NULL,第三个參数为插入的内容
return dataBase.insert(table, null, content);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
return 0;
}
/**
* 批量删除指定主键数据
*
* @param ids
*/
public void deleteByIds(String table, Object... primaryKeys) {
try {
if (primaryKeys.length > 0) {
StringBuilder sb = new StringBuilder();
for (@SuppressWarnings("unused")
Object id : primaryKeys) {
sb.append("?").append(",");
}
sb.deleteCharAt(sb.length() - 1);
dataBase = dBManager.openDatabase();
dataBase.execSQL("delete from " + table + " where "
+ mPrimaryKey + " in(" + sb + ")",
(Object[]) primaryKeys);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
}
/**
* 依据某一个字段和值删除一行数据, 如 name="jack"
*
* @param table
* @param field
* @param value
* @return 返回值大于0表示删除成功
*/
public int deleteByField(String table, String field, String value) {
try {
dataBase = dBManager.openDatabase();
return dataBase.delete(table, field + "=?", new String[] { value });
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
return 0;
}
/**
* 依据条件删除数据
*
* @param table
* 表名
* @param whereClause
* 查询语句 參数採用?
* @param whereArgs
* 參数值
* @return 返回值大于0表示删除成功
*/
public int deleteByCondition(String table, String whereClause,
String[] whereArgs) {
try {
dataBase = dBManager.openDatabase();
return dataBase.delete(table, whereClause, whereArgs);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
return 0;
}
/**
* 依据主键删除一行数据
*
* @param table
* @param id
* @return 返回值大于0表示删除成功
*/
public int deleteById(String table, String id) {
try {
dataBase = dBManager.openDatabase();
return deleteByField(table, mPrimaryKey, id);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
return 0;
}
/**
* 依据主键更新一行数据
*
* @param table
* @param id
* @param values
* @return 返回值大于0表示更新成功
*/
public int updateById(String table, String id, ContentValues values) {
try {
dataBase = dBManager.openDatabase();
return dataBase.update(table, values, mPrimaryKey + "=?",
new String[] { id });
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
return 0;
}
/**
* 更新数据
*
* @param table
* @param values
* @param whereClause
* @param whereArgs
* @return 返回值大于0表示更新成功
*/
public int update(String table, ContentValues values, String whereClause,
String[] whereArgs) {
try {
dataBase = dBManager.openDatabase();
return dataBase.update(table, values, whereClause, whereArgs);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
return 0;
}
/**
* 依据主键查看某条数据是否存在
*
* @param table
* @param id
* @return
*/
public Boolean isExistsById(String table, String id) {
try {
dataBase = dBManager.openDatabase();
return isExistsByField(table, mPrimaryKey, id);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
return null;
}
/**
* 依据某字段/值查看某条数据是否存在
*
* @param status
* @return
*/
public Boolean isExistsByField(String table, String field, String value) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT COUNT(*) FROM ").append(table).append(" WHERE ")
.append(field).append(" =?");
try {
dataBase = dBManager.openDatabase();
return isExistsBySQL(sql.toString(), new String[] { value });
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
return null;
}
/**
* 使用SQL语句查看某条数据是否存在
*
* @param sql
* @param selectionArgs
* @return
*/
public Boolean isExistsBySQL(String sql, String[] selectionArgs) {
Cursor cursor = null;
try {
dataBase = dBManager.openDatabase();
cursor = dataBase.rawQuery(sql, selectionArgs);
if (cursor.moveToFirst()) {
return (cursor.getInt(0) > 0);
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(cursor);
}
}
return null;
}
/**
* 查询一条数据
*
* @param rowMapper
* @param sql
* @param args
* @return
*/
public <T> T queryForObject(RowMapper<T> rowMapper, String sql,
String[] args) {
Cursor cursor = null;
T object = null;
try {
dataBase = dBManager.openDatabase();
cursor = dataBase.rawQuery(sql, args);
if (cursor.moveToFirst()) {
object = rowMapper.mapRow(cursor, cursor.getCount());
}
} finally {
if (!isTransaction) {
closeDatabase(cursor);
}
}
return object;
}
/**
* 查询
*
* @param rowMapper
* @param sql
* @param startResult
* 開始索引 注:第一条记录索引为0
* @param maxResult
* 步长
* @return
*/
public <T> List<T> queryForList(RowMapper<T> rowMapper, String sql,
String[] selectionArgs) {
Cursor cursor = null;
List<T> list = null;
try {
dataBase = dBManager.openDatabase();
cursor = dataBase.rawQuery(sql, selectionArgs);
list = new ArrayList<T>();
while (cursor.moveToNext()) {
list.add(rowMapper.mapRow(cursor, cursor.getPosition()));
}
} finally {
if (!isTransaction) {
closeDatabase(cursor);
}
}
return list;
}
/**
* 分页查询
*
* @param rowMapper
* @param sql
* @param startResult
* 開始索引 注:第一条记录索引为0
* @param maxResult
* 步长
* @return
*/
public <T> List<T> queryForList(RowMapper<T> rowMapper, String sql,
int startResult, int maxResult) {
Cursor cursor = null;
List<T> list = null;
try {
dataBase = dBManager.openDatabase();
cursor = dataBase.rawQuery(sql + " limit ?,?
", new String[] {
String.valueOf(startResult), String.valueOf(maxResult) });
list = new ArrayList<T>();
while (cursor.moveToNext()) {
list.add(rowMapper.mapRow(cursor, cursor.getPosition()));
}
} finally {
if (!isTransaction) {
closeDatabase(cursor);
}
}
return list;
}
/**
* 获取记录数
*
* @return
*/
public Integer getCount(String sql, String[] args) {
Cursor cursor = null;
try {
dataBase = dBManager.openDatabase();
cursor = dataBase.rawQuery("select count(*) from (" + sql + ")",
args);
if (cursor.moveToNext()) {
return cursor.getInt(0);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(cursor);
}
}
return 0;
}
/**
* 分页查询
*
* @param rowMapper
* @param table
* 检索的表
* @param columns
* 由须要返回列的列名所组成的字符串数组,传入null会返回全部的列。
* @param selection
* 查询条件子句,相当于select语句wherekeyword后面的部分,在条件子句同意使用占位符"?
"
* @param selectionArgs
* 相应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致。否则就会有异常
* @param groupBy
* 对结果集进行分组的group by语句(不包含GROUP BYkeyword)。传入null将不正确结果集进行分组
* @param having
* 对查询后的结果集进行过滤,传入null则只是滤
* @param orderBy
* 对结果集进行排序的order by语句(不包含ORDER BYkeyword)。传入null将对结果集使用默认的排序
* @param limit
* 指定偏移量和获取的记录数。相当于select语句limitkeyword后面的部分,假设为null则返回全部行
* @return
*/
public <T> List<T> queryForList(RowMapper<T> rowMapper, String table,
String[] columns, String selection, String[] selectionArgs,
String groupBy, String having, String orderBy, String limit) {
List<T> list = null;
Cursor cursor = null;
try {
dataBase = dBManager.openDatabase();
cursor = dataBase.query(table, columns, selection, selectionArgs,
groupBy, having, orderBy, limit);
list = new ArrayList<T>();
while (cursor.moveToNext()) {
list.add(rowMapper.mapRow(cursor, cursor.getPosition()));
}
} finally {
if (!isTransaction) {
closeDatabase(cursor);
}
}
return list;
}
/**
* Get Primary Key
*
* @return
*/
public String getPrimaryKey() {
return mPrimaryKey;
}
/**
* Set Primary Key
*
* @param primaryKey
*/
public void setPrimaryKey(String primaryKey) {
this.mPrimaryKey = primaryKey;
}
/**
*
* @author shimiso
*
* @param <T>
*/
public interface RowMapper<T> {
/**
*
* @param cursor
* 游标
* @param index
* 下标索引
* @return
*/
public T mapRow(Cursor cursor, int index);
}
/**
* 关闭数据库
*/
public void closeDatabase(Cursor cursor) {
if (null != dataBase) {
dataBase.close();
}
if (null != cursor) {
cursor.close();
}
}
}
android 工具类 数据库管理的更多相关文章
- [Android Pro] 常用的android工具类和库
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50614086 这篇博客主要记录我认为比较有用的Android ...
- 摘录android工具类
import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.Pac ...
- Android工具类整合
Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...
- Android 工具类大全
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311 1.日志工具类L.java package com.zhy.uti ...
- 【Android 工具类】经常使用工具类(方法)大全
收集经常使用的工具类或者方法: 1.获取手机分辨率 /** * 获取手机分辨率 */ public static String getDisplayMetrix(Context context) { ...
- android 工具类之SharePreference
/** * SharedPreferences的一个工具类,调用setParam就能保存String, Integer, Boolean, Float, Long类型的参数 * 同样调用getPara ...
- android 工具类 DateUtil
提取了一些在开发过程中可能会用到的日期相关的函数作为工具类.供大家參考: /** * 日期操作工具类. * * @author shimiso */ public class DateUtil { p ...
- Android工具类-关于网络、状态的工具类
下方是一个很好的监测网络.状态的工具类 public class NetworkUtils { /** * 网络是否可用 * * @param activity * @return */ public ...
- 【Android工具类】Activity管理工具类AppManager
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 import java.util.Stack; import android.app.Activity; i ...
随机推荐
- mac 安装phpunit
大部分内容来自:https://blog.csdn.net/aishangyutian12/article/details/64124536 感谢创作,感谢分享 单元测试的重要性就不说了,postma ...
- mac 安装nginx,并配置nginx的运行环境
1. 安装nginx // 查询有没有nginx brew search nginx //开始安装nignx brew install nginx 2. 检查nignx是否安装成功 nginx -V ...
- hdu2328 kmp
Beside other services, ACM helps companies to clearly state their “corporate identity”, which includ ...
- thinkphp3.2 jquery ajax巧妙使用
1.做帐号管理的时候,我们去除一些重复的帐号是有必要的. 我使用的是jquery ajax 来和控制器进行传值.当我们跳转到我们要验证方法返回结果的时候,我们就可以使用php里的一个 0 为false ...
- Oracle性能诊断艺术-学习笔记(索引访问方式)
环境准备: 1.0 测试表 CREATE TABLE t ( id NUMBER, d1 DATE, n1 NUMBER, n2 NUMBER, n3 NUMBER, n4 NUMBER, n5 NU ...
- Oracle EBS供应商接口导入(转)
原文地址 Oracle EBS供应商接口导入 1.供应商导入组成供应商导入主要分为供应商头信息导入.供应商地点信息导入.供应商联系人导入三个部分的信息,其他按实际需求进行添加.供应商头信息导入:导入供 ...
- Spring boot 嵌入的tomcat不能启动: Unregistering JMX-exposed beans on shutdown
原因是:没有引入tomcat依赖包 <dependency> <groupId>org.springframework.boot</groupId> <art ...
- 小议常被忽略的a标签:visited属性的特殊用法
CSS1/CSS2对于a定义了4个伪类, :link a标签未访问时的样式 :active a标签mousedown时的样式 :hover a标签mouseover时的样式 :visited ...
- 二维数组malloc
//WC[K][N] double **WC = (double**)malloc(sizeof(double*)*K); ; i < K; i++) { WC[i] = (double*)ma ...
- Idea检入boss项目
Idea检入boss项目