分享一个简单的SQLite工具
来源:互联网 发布:华讯网络本科生工资 编辑:程序博客网 时间:2024/05/17 07:15
分享一个简单的SQLite工具
/** * 数据库基础类 * 该工具类只是简单的封装了sql语句 */public class SQLUtils extends SQLiteOpenHelper{ private static final int version = 1; private static final String DBName = "myDB"; public SQLUtils(Context context) { super(context, DBName, null, version); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub SQLUtils.createAllTable(db); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub if(newVersion==version){ deleteAllTable(db); SQLUtils.createAllTable(db); }else{ Log.e("SQLUtils"+"_onDowngrade", "安装app时数据库版本不正确!"); } } @Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub if(newVersion==version){ deleteAllTable(db); SQLUtils.createAllTable(db); }else{ Log.e("SQLUtils"+"_onDowngrade","安装app时数据库版本不正确!"); } } /** * 功能描述:创建表 * 输入参数: sqlDB:操作的数据库, * tableName 表名 * 返回值: tableName:成功或表已存在,null:失败 * 其它说明:无 * 创建记录:版本号:1.00 修改日期:2015/07/01 */ public static String createTable(SQLiteDatabase sqlDB,String tableName,String[] fileds){ if(!sqlDB.isOpen()){ //数据库已关闭 return ""; } StringBuilder sql = new StringBuilder(""); sql.append("create table if not exists "); sql.append(tableName); sql.append("("); sql.append(tableName+"_id"); sql.append(" integer primary key autoincrement"); for(int i=0;i<fileds.length;i++){ sql.append(","+fileds[i]); } sql.append(")"); Log.i("createTable", sql.toString()); try{ sqlDB.execSQL(sql.toString()); }catch(SQLException e){ e.printStackTrace(); return null; } return tableName; } /** * 功能描述:插入行信息 * 输入参数: sqlDB:操作的数据库, * tableName 表名 * key null:自增长,非null:指定值 * data 字段,依次 * 返回值: true:成功,false:失败 * 其它说明:无 * 创建记录:版本号:1.00 修改日期:2015/07/01 */ public static boolean insert(SQLiteDatabase sqlDB,String tableName, String key, String[] data){ if(!sqlDB.isOpen()){ //数据库已关闭 return false; } if(tableName==null||"".equals(tableName.trim())) return false; if(data==null||data.length<=0) return false; StringBuilder sql = new StringBuilder(""); sql.append("insert into "); sql.append(tableName); sql.append(" values("); sql.append(key); for(int i=0;i<data.length;i++){ sql.append(",?"); } sql.append(")");// Log.i("insert", sql.toString()); sqlDB.beginTransaction();//开始事务 try{ sqlDB.execSQL(sql.toString(), data); sqlDB.setTransactionSuccessful();// 设置事务的标志为true,调用此方法会在执行到endTransaction()方法是提交事务,若没有调用此方法会在执行到endTransaction()方法回滚事务。 return true; }catch(SQLException e){ e.printStackTrace(); return false; } finally { sqlDB.endTransaction(); }// return false; } /** * 功能描述:更新数据 * 输入参数: tableName 表名 * sqlDB:操作的数据库, * where 指定位置 * updateFileds 更新字段 * 返回值: true:成功,false:失败 * 其它说明:无 * 创建记录:版本号:1.00 修改日期:2015/07/01 */ public static boolean update(SQLiteDatabase sqlDB,String tableName,HashMap<String, String> where, HashMap<String, String> updateFileds){ if(!sqlDB.isOpen()){ //数据库已关闭 return false; } if(tableName==null||"".equals(tableName.trim())) return false; if(where==null||where.size()<=0) return false; if(updateFileds==null||updateFileds.size()<=0) return false; ArrayList<String> keyList = new ArrayList<String>(); ArrayList<String> valueList = new ArrayList<String>(); ArrayList<String> whereValList = new ArrayList<String>(); StringBuilder sql = new StringBuilder(""); sql.append("update "); sql.append(tableName); sql.append(" set "); Iterator iter = updateFileds.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String key = (String) entry.getKey(); String val = (String) entry.getValue(); keyList.add(key); valueList.add(val); } for(int i=0;i<keyList.size()-1;i++){ sql.append(keyList.get(i)+"=?,"); } sql.append(keyList.get(keyList.size()-1)+"=?"); sql.append(" where "); sql.append("1=1"); Iterator iter1 = where.entrySet().iterator(); while (iter1.hasNext()) { Map.Entry entry = (Map.Entry) iter1.next(); String key = (String) entry.getKey(); String val = (String) entry.getValue(); sql.append(" and "+key+"=?"); whereValList.add(val); } String[] vals = new String[valueList.size()+whereValList.size()]; for(int j=0;j<valueList.size();j++){ vals[j] = valueList.get(j); } for(int k=valueList.size();k<valueList.size()+whereValList.size();k++){ vals[k] = whereValList.get(k-valueList.size()); }// Log.i("update", sql.toString()); sqlDB.beginTransaction();//开始事务 try{ sqlDB.execSQL(sql.toString(), vals); sqlDB.setTransactionSuccessful();// 设置事务的标志为true,调用此方法会在执行到endTransaction()方法是提交事务,若没有调用此方法会在执行到endTransaction()方法回滚事务。 return true; }catch(SQLException e){ e.printStackTrace(); return false; } finally { sqlDB.endTransaction(); } } /** * 功能描述:删除指定行 * 输入参数: sqlDB:操作的数据库, * tableName 表名 * where 位置 * 返回值: true:成功,false:失败 * 其它说明:无 * 创建记录:版本号:1.00 修改日期:2015/07/01 */ public static boolean delete(SQLiteDatabase sqlDB,String tableName,HashMap<String, String> where){ if(!sqlDB.isOpen()){ //数据库已关闭 return false; } if(tableName==null||"".equals(tableName.trim())) return false; if(where==null||where.size()<=0) return false; StringBuilder sql = new StringBuilder(""); ArrayList<String> valueList = new ArrayList<String>(); sql.append("delete from "); sql.append(tableName); sql.append(" where 1=1 "); Iterator iter = where.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String key = (String) entry.getKey(); String val = (String) entry.getValue(); sql.append(" and "+key+"=?"); valueList.add(val); } String[] vals = new String[valueList.size()]; for(int i=0;i<valueList.size();i++){ vals[i] = valueList.get(i); }// Log.i("delete", sql.toString()); sqlDB.beginTransaction();//开始事务 try{ sqlDB.execSQL(sql.toString(), vals); sqlDB.setTransactionSuccessful();// 设置事务的标志为true,调用此方法会在执行到endTransaction()方法是提交事务,若没有调用此方法会在执行到endTransaction()方法回滚事务。 return true; }catch(SQLException e){ e.printStackTrace(); return false; }finally { sqlDB.endTransaction(); } } /** * 功能描述:删除表中所有行 * 输入参数:sqlDB:操作的数据库, * tableName 表名 * 返回值: true:成功,false:失败 * 其它说明:无 * 创建记录:版本号:1.00 修改日期:2015/07/01 */ public static boolean deleteAll(SQLiteDatabase sqlDB,String tableName){ if(!sqlDB.isOpen()){ //数据库已关闭 return false; } StringBuilder sql = new StringBuilder(""); sql.append("delete from "); sql.append(tableName);// Log.i("deleteAll", sql.toString()); sqlDB.beginTransaction();//开始事务 try{ sqlDB.execSQL(sql.toString()); sqlDB.setTransactionSuccessful();// 设置事务的标志为true,调用此方法会在执行到endTransaction()方法是提交事务,若没有调用此方法会在执行到endTransaction()方法回滚事务。 return true; }catch(SQLException e){ e.printStackTrace(); return false; }finally { sqlDB.endTransaction(); } } /** * 功能描述:查询表 * 输入参数: sqlDB:操作的数据库, * tableName 表名 * where null或长度为0:所有行,非空且长度大于0:指定行 * 返回值:Cursor对象:成功,null:失败 * 其它说明:无 * 创建记录:版本号:1.00 修改日期:2015/07/01 */ public static Cursor select(SQLiteDatabase sqlDB,String tableName,HashMap<String, String> where){ if(!sqlDB.isOpen()){ //数据库已关闭 return null; } if(tableName==null||"".equals(tableName.trim())) return null; StringBuilder sql = new StringBuilder(""); ArrayList<String> valueList = new ArrayList<String>(); String[] vals; sql.append("select * from "); sql.append(tableName); if(where==null||where.size()<=0){ vals = null; }else{ sql.append(" where 1=1"); Iterator iter = where.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String key = (String) entry.getKey(); String val = (String) entry.getValue(); sql.append(" and "+key+"=?"); valueList.add(val); } vals = new String[valueList.size()]; for(int i=0;i<valueList.size();i++){ vals[i] = valueList.get(i); } }// Log.i("select", sql.toString()); try{ Cursor cs = sqlDB.rawQuery(sql.toString(), vals); return cs; }catch(SQLException e){ e.printStackTrace(); return null; } } /** * 功能描述:关闭游标, * 输入参数: 无 * 返回值:无 * 其它说明:无, * 创建记录:版本号:1.00 修改日期:2015/08/19 */ public static void closeCursor(Cursor cursor){ if(cursor!=null){ cursor.close(); cursor = null; } } /** * 功能描述:创建应用所需要的所有表, * 输入参数: 无 * 返回值:无 * 其它说明:无, * 创建记录:版本号:1.00 修改日期:2015/07/23 */ public static void createAllTable(SQLiteDatabase sqlDB){ if(!sqlDB.isOpen()){ //数据库已关闭 return ; } createTable(sqlDB,TABLE_NAME, DBAccount.FIELDS);//TABLE_NAME为所创建表的表名 Log.e("SQLUtil"+"_createAllTable","数据库版本:"+sqlDB.getVersion()); } /**删除所有表*/ private static boolean deleteAllTable(SQLiteDatabase sqlDB){ Log.i("SQLUtils"+"_deleteAllTable","删除所有表"); try{ String str = "drop table "; sqlDB.execSQL(str+ TABLE_NAME);//TABLE_NAME为所创建表的表名 }catch(SQLException e){ e.printStackTrace(); return false; } return true; }}
SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。所以在该工具中的所有字段都是String类型的,所造成的不利的地方就是只能保存一些简单的数据类型,在该工具中值提供了简单的增删改查功能。用法:
SQLiteDatabase sqlDB; SQLUtils sqlU = new SQLUtils(context); sqlDB = sqlU.getReadableDatabase(); SQLUtils.insert(sqlDB,TABLE_NAME,null,new String[]{/*表的字段*/});//增 //删 HashMap<String, String> where = new HashMap<String, String>(); where.put("","");//依据那个字段的什么值 SQLUtils.delete(sqlDB,TABLE_NAME,where); //改 HashMap<String, String> where = new HashMap<String, String>(); where.put("",""); HashMap<String, String> updateFileds = new HashMap<String, String>(); updateFileds .put("",""); SQLUtils.update(sqlDB,TABLE_NAME,where,updateFileds); //查,从工具中获取到的是游标Cursor,通过Cursor来获取查询到的数据 Cursor cursor = SQLUtils.select(sqlDB,DBAccount.TABLE_NAME,where); ArrayList list = new ArrayList(); if(cursor!=null && cursor.getCount() > 0){ while(cursor.moveToNext()){ Object o = new Object(); o.setA(cursor.getString(cursor.getColumnIndex("a"))); list.add(o); } } SQLUtils.closeCursor(cursor);
这个是我刚接触SQLite后写的,不正确的地方欢迎提出建议。
阅读全文
0 0
- 分享一个简单的SQLite工具
- 一个简单的文件分享工具
- 分享一个SQLite入门教程
- 分享一个简单的Makefile
- 推荐一个查看SQLite数据库的工具
- 分享一个小巧简单的基金查询工具(自己写的)
- 分享一个项目中用到的简单的id生成工具
- 分享一个.NET实现的简单高效WEB压力测试工具
- 分享一个.NET实现的简单高效WEB压力测试工具
- 分享一个.NET实现的简单高效WEB压力测试工具
- 一个简单的python sqlite wrapper
- 一个简单的Android SQLite ORM框架
- 分享一个金额运算的工具类
- ShareSdk的一个分享工具类
- 分享一个SharedPreferences操作的工具类
- 分享一个导出excel的工具类
- 分享一个文件操作的工具类
- 介绍一个分享社会化web信息的分享工具
- 最近已经切换到某园去更新博客啦
- django自定义command命令
- PHP 之 FastCGI 与 mod_php
- 基于SVM的猫咪图片识别器
- Eclipse工作空间管理
- 分享一个简单的SQLite工具
- 排序算法
- nginx中 $1,$2,$3是什么 如:set $para $1
- 近似算法 集合覆盖问题代码实现 基于贪心策略 基于线性规划策略
- 破解必备,软件破解中常用API函数大全
- zabbix sender的使用
- Kotlin 资源大全
- 打开主页面直接到登录网页,而不是到首页
- BigInteger 与 BigDecimal的区别