分享一个简单的SQLite工具

本文介绍了一个简单的SQLite工具类封装,包括数据库的基本操作如创建、增删改查等,并提供使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一个简单的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后写的,不正确的地方欢迎提出建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值