Android Sqlite 工具类封装
鉴于经常使用 Sqlite 数据库做数据持久化处理,进行了一点封装,方便使用。
该封装类主要支持一下功能
- 支持多用户数据储存
- 支持 Sqlite数据库升级
- 支持传入 Sql 语句建表
- 支持 SQLiteDatabase 基本操作。比如:execSQL、rawQuery、insert等等
- 解决了数据库并发问题
先贴上封装类代码
/**
*
* @ClassName: DataBaseOpenHelper
* @Description: 数据库工具类
* @author lhy
* @date 2014-10-9 下午2:36:41
*
*/
public class DataBaseOpenHelper extends SQLiteOpenHelper {
private static Map<String, DataBaseOpenHelper> dbMaps = new HashMap<String, DataBaseOpenHelper>();
private OnSqliteUpdateListener onSqliteUpdateListener;
/**
* 建表语句列表
*/
private List<String> createTableList;
private String nowDbName; private DataBaseOpenHelper(Context context, String dbName, int dbVersion, List<String> tableSqls) {
super(context, dbName, null, dbVersion);
nowDbName = dbName;
createTableList = new ArrayList<String>();
createTableList.addAll(tableSqls);
} /**
*
* @Title: getInstance
* @Description: 获取数据库实例
* @param @param context
* @param @param userId
* @param @return
* @return DataBaseOpenHelper
* @author lihy
*/
public static DataBaseOpenHelper getInstance(Context context, String dbName, int dbVersion, List<String> tableSqls) {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(dbName);
if (dataBaseOpenHelper == null) {
dataBaseOpenHelper = new DataBaseOpenHelper(context, dbName, dbVersion, tableSqls);
}
dbMaps.put(dbName, dataBaseOpenHelper);
return dataBaseOpenHelper;
}; @Override
public void onCreate(SQLiteDatabase db) {
for (String sqlString : createTableList) {
db.execSQL(sqlString);
}
} /**
*
* @Title: execSQL
* @Description: Sql写入
* @param @param sql
* @param @param bindArgs
* @return void
* @author lihy
*/
public void execSQL(String sql, Object[] bindArgs) {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);
synchronized (dataBaseOpenHelper) {
SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase();
database.execSQL(sql, bindArgs);
}
} /**
*
* @Title: rawQuery
* @Description:
* @param @param sql查询
* @param @param bindArgs
* @param @return
* @return Cursor
* @author lihy
*/
public Cursor rawQuery(String sql, String[] bindArgs) {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);
synchronized (dataBaseOpenHelper) {
SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase();
Cursor cursor = database.rawQuery(sql, bindArgs);
return cursor;
}
} /**
*
* @Title: insert
* @Description: 插入数据
* @param @param table
* @param @param contentValues 设定文件
* @return void 返回类型
* @author lihy
* @throws
*/
public void insert(String table, ContentValues contentValues) {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);
synchronized (dataBaseOpenHelper) {
SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase();
database.insert(table, null, contentValues);
}
} /**
*
* @Title: update
* @Description: 更新
* @param @param table
* @param @param values
* @param @param whereClause
* @param @param whereArgs 设定文件
* @return void 返回类型
* @throws
*/
public void update(String table, ContentValues values, String whereClause, String[] whereArgs) {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);
synchronized (dataBaseOpenHelper) {
SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase();
database.update(table, values, whereClause, whereArgs);
}
}
/**
*
* @Title: delete
* @Description:删除
* @param @param table
* @param @param whereClause
* @param @param whereArgs
* @return void
* @author lihy
*/
public void delete(String table, String whereClause, String[] whereArgs) {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);
synchronized (dataBaseOpenHelper) {
SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase();
database.delete(table, whereClause, whereArgs);
}
} /**
*
* @Title: query
* @Description: 查
* @param @param table
* @param @param columns
* @param @param selection
* @param @param selectionArgs
* @param @param groupBy
* @param @param having
* @param @param orderBy
* @return void
* @author lihy
*/
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having,
String orderBy) {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);
synchronized (dataBaseOpenHelper) {
SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase();
// Cursor cursor = database.rawQuery("select * from "
// + TableName.TABLE_NAME_USER + " where userId =" + userId, null);
Cursor cursor = database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
return cursor;
}
}
/**
*
* @Description:查
* @param table
* @param columns
* @param selection
* @param selectionArgs
* @param groupBy
* @param having
* @param orderBy
* @param limit
* @return
* Cursor
* @exception:
* @author: lihy
* @time:2015-4-3 上午9:37:29
*/
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having,
String orderBy,String limit) {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);
synchronized (dataBaseOpenHelper) {
SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase();
// Cursor cursor = database.rawQuery("select * from "
// + TableName.TABLE_NAME_USER + " where userId =" + userId, null);
Cursor cursor = database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit);
return cursor;
}
} /**
*
* @Description 查询,方法重载,table表名,sqlString条件
* @param @return
* @return Cursor
* @author lihy
*/
public Cursor query(String tableName, String sqlString) {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);
synchronized (dataBaseOpenHelper) {
SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase();
Cursor cursor = database.rawQuery("select * from " + tableName + " " + sqlString, null); return cursor;
}
} /**
* @see android.database.sqlite.SQLiteOpenHelper#close()
*/
public void clear() {
DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);
dataBaseOpenHelper.close();
dbMaps.remove(dataBaseOpenHelper);
} /**
* onUpgrade()方法在数据库版本每次发生变化时都会把用户手机上的数据库表删除,然后再重新创建。<br/>
* 一般在实际项目中是不能这样做的,正确的做法是在更新数据库表结构时,还要考虑用户存放于数据库中的数据不会丢失,从版本几更新到版本几。(非
* Javadoc)
*
* @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
* .SQLiteDatabase, int, int)
*/
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
if (onSqliteUpdateListener != null) {
onSqliteUpdateListener.onSqliteUpdateListener(db, arg1, arg2);
}
} public void setOnSqliteUpdateListener(OnSqliteUpdateListener onSqliteUpdateListener) {
this.onSqliteUpdateListener = onSqliteUpdateListener;
}
}
数据库更新接口代码
public interface OnSqliteUpdateListener {
public void onSqliteUpdateListener(SQLiteDatabase db, int oldVersion, int newVersion);
}
Android Sqlite 工具类封装的更多相关文章
- Android 常见工具类封装
1,MD5工具类: public class MD5Util { public final static String MD5(String s) { char hexDigits[] = { '0' ...
- Android常见工具类封装
MD5加密 import android.annotation.SuppressLint; import java.security.MessageDigest; public class MD5 { ...
- Android常用工具类封装---SharedPreferencesUtil
SharedPreferences常用于保存一些简单的数据,如记录用户操作的配置等,使用简单. public class SharedPreferencesUtil { // ...
- 关于TornadoFx和Android的全局配置工具类封装实现及思路解析
原文地址: 关于TornadoFx和Android的全局配置工具类封装实现及思路解析 - Stars-One的杂货小窝 目前个人开发软件存在设置页面,可以让用户自定义些设置,但我发现,存储数据的代码逻 ...
- (转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)
目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选 程序员8月书讯 项目管理+代码托管+文档协作,开发更流畅 百度地图工具类封装(包括定位,附近.城市.范围poi检索, ...
- (转载)android 一些工具类汇总
android 一些工具类汇总 作者:曾田生z 字体:[增加 减小] 类型:转载 时间:2016-08-14我要评论 本文给大家汇总介绍了一些常用的Android工具类,非常的简单实用,有需要的小伙伴 ...
- 53. Android常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...
- Redis操作Set工具类封装,Java Redis Set命令封装
Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...
- Redis操作List工具类封装,Java Redis List命令封装
Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...
随机推荐
- Myeclipse中打开接口实现类的快捷键
Myeclipse中打开接口实现类的快捷键-----Ctrl + T Myeclipse中 Open Type快捷键-----Ctrl + Shift + T
- VC++ 中CDC与HDC的区别以及二者之间的转换
MFC类的前缀都是C开头的 H开头的大多数是句柄 这是为了助记,是编程读\写代码的好的习惯. CDC中所有MFC的DC的基类.常用的CClientDC dc(this);就是CDC的子类(或称派 ...
- Button模板,样式
一.button控件上的模板 <Button Content="Button" Height="25" HorizontalAlignment=" ...
- mvc Razor 视图中找不到 ViewBag的定义
在Razor 视图中,我们有时会看到 ViewBag.Title 下会划一个红线,当鼠标放上去的时候会提示这样的一个错误: 找不到编译动态表达式所需的一种或多种类型,是否缺少引用? 但在项目启动运行时 ...
- Python scipy.sparse矩阵使用方法
本文以csr_matrix为例来说明sparse矩阵的使用方法,其他类型的sparse矩阵可以参考https://docs.scipy.org/doc/scipy/reference/sparse.h ...
- Function类型
1.每个函数都是Function类型的,和其他引用类型一样都具有属性和方法.函数也是对象,因此函数实际上是一个指向函数对象的指针. 函数声明语法定义: 方法1: function sum(num1,n ...
- Vue.js 动态绑定class
Vue.js 的核心是一个响应的数据绑定系统,它允许我们在普通 HTML 模板中使用特殊的语法将 DOM “绑定”到底层数据.被绑定的DOM 将与数据保持同步,每当数据有改动,相应的DOM视图也会更新 ...
- css中clip-path属性的运用
今天看到一位同学的需求,要在一个div中加一个小尖尖,对话时发的图片,旁边这个三角是怎么实现与图片的颜色一致,效果如下: 当然,解决这个问题有各种奇淫巧技,现在我们来看一个css属性clip-path ...
- C#(asp.net )读取ASHX文件(一般处理程序)
c#后台获取asxh的返回数据,后台创建一个请求实例,获取请求实例的返回值 public string GetResponseByPost(string apiUrl, string queryStr ...
- SVN 集中式版本控制软件
简介: 目前流行的版本控制软件中,SVN ( 集中式版本控制 ) 算是使用范围更广.且使用时间更早的一款了,现在 git ( 分布式版本控制 ) 更火爆一点. 一.安装svn [root@localh ...