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

原创粉丝点击