分享一个简单的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后写的,不正确的地方欢迎提出建议。
本文介绍了一个简单的SQLite工具类封装,包括数据库的基本操作如创建、增删改查等,并提供使用示例。
2510

被折叠的 条评论
为什么被折叠?



