鉴于经常使用 Sqlite 数据库做数据持久化处理,进行了一点封装,方便使用。

该封装类主要支持一下功能

  1. 支持多用户数据储存
  2. 支持 Sqlite数据库升级
  3. 支持传入 Sql 语句建表
  4. 支持 SQLiteDatabase 基本操作。比如:execSQL、rawQuery、insert等等
  5. 解决了数据库并发问题
      

先贴上封装类代码

/*** * @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;};@Overridepublic 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)*/@Overridepublic 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);
}

转载于:https://www.cnblogs.com/ProMonkey/p/5765616.html

Android Sqlite 工具类封装相关推荐

  1. Android 常见工具类封装

    1,MD5工具类: public class MD5Util {public final static String MD5(String s) {char hexDigits[] = { '0', ...

  2. android sqlite 操作类封装,[Android] Sqlite 数据库操做 工具封装类

    sqlite 数据库封装类html DatabaseUtil.java(封装的类)java packagecom.jack.androidbase.tools;importandroid.conten ...

  3. android sqlite 操作类封装,SQLiteUtils 一个简单的基于 Android 的 Sqlite 数据库的操作封装库 @codeKK Android开源站...

    一个简单的基于 Android 的 Sqlite 数据库的操作封装,它有如下的好处: 便捷地创建表和增添表字段 通过操作对象来 insert 或者 update 表记录 支持多种查询方式,支持分页查询 ...

  4. Android 图片处理工具类封装2

    http://www.2cto.com/kf/201312/263638.html Android 图片处理工具类封装 2013-12-10     0个评论   来源:Wiker Yong 的专栏  ...

  5. Android开发工具类 Utils

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  6. Android开发工具类

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  7. android sharedpreferences工具类

    今天,简单讲讲如何写一个sharedpreferences的工具类. 很简单,把一些重复的操作封装在工具类里,其他地方调用就可以.在网上搜索了比较多的资料,找到一个比较好的工具类. 参考文章:http ...

  8. android sharedpreferences 工具类,android sharedpreferences工具类

    释放双眼,带上耳机,听听看~! 今天,简单讲讲如何写一个sharedpreferences的工具类. 很简单,把一些重复的操作封装在工具类里,其他地方调用就可以.在网上搜索了比较多的资料,找到一个比较 ...

  9. Android开发工具类集锦

    概述 本人做android开发已有段日子了,在开发的过程中一直使用着工具类,包括别人已经封装好的工具类以及自己封装的工具类,本篇博客向大家介绍自己在开发过程中经常使用到的一些简单实用的工具类,在文章末 ...

  10. Redis工具类封装讲解和实战

    Redis工具类封装讲解和实战     简介:高效开发方式 Redis工具类封装讲解和实战         1.常用客户端 https://redisdesktop.com/download      ...

最新文章

  1. 大数据:从入门到XX(一)
  2. linux java查看进程命令_linux一些查看进程情况的命令
  3. 数据结构 单链表 (C++)(转载)
  4. 计算机操作系统还能这样玩?这一篇计算机操作系统的总结为你保驾护航(零风险、高质量、万字长文、建议收藏)
  5. unity 解决引入dlopen api的问题
  6. 我的BERT!改改字典,让BERT安全提速不掉分(已开源)
  7. Windows环境下Anaconda-Navigator出现闪退、无法打开问题的解决方案记录
  8. H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权
  9. php zhxing iptables,Linux iptables 扩展 ipset 使用教程
  10. 通过代码学 Sutton 强化学习:SARSA、Q-Learning 时序差分算法训练 CartPole
  11. 优秀程序员必学的开发工具教程!
  12. Postgre使用笔记之按id顺序排序意义
  13. Python 列表(List) 的三种遍历(序号和值)方法
  14. vm虚拟机win7安装镜像方法
  15. 嵌入式软件高频面试题
  16. 灵信LED屏 二次开发C#
  17. 网页截图小技巧——利用浏览器自带功能即可(无需安装插件)
  18. NET Reflector 8 使用
  19. 20寸JAVA16速自行车_健康成长 快乐骑行 JAVA16/20寸儿童自行车介绍
  20. 泰拉瑞亚Tshock服务器权限

热门文章

  1. python代码_Python代码的优化技巧
  2. C#中日历控件的使用monthCalendar,dateTimePicker
  3. PHP 编写接口并在header中进行简单的校验
  4. PHP实现下载远程图片保存到本地的方法
  5. PHP file_get_contents与file_put_contents
  6. PHP中的数组(拆分与合并)
  7. PHP中的session分析与使用
  8. android 封装回调,OkHttp 优雅封装 OkHttps 之 回调线程魔变
  9. error: could not lock config file .git/config: Permission denied/Command failed with exit 255
  10. 连范例都不跑,大哥你怎么知道你的代码正确?