数据的存储方式:SQLiteOpenHelper的用法

Android为了让我们能够更加方便的的管理数据,专门提供了一个SQLiteOpenHelper类,它是一个抽象类,如果我们想要使用它,就需要创建一个自己帮助类去继承它,而且它有两个抽象的方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后可以在其中去实现创建、升级数据库的逻辑。

SQLiteOpenHelper中还有两个非常重要的实例方法:getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库,并返回一个可对数据库进行操作的对象,不同的是,当数据不可写入时(如磁盘已满)、getReadableDatabase()方法返回的对象将以只读方式去打开数据库,而getWritableDatabase()方法则将出现异常

下面是我封装的继承SQLiteOpenHelper的类:

public class SQLiteDBHelper extends SQLiteOpenHelper {

    public SQLiteDBHelper(Context context, final String dbName, final int dbVersion){
        super(context, dbName, null, dbVersion);
    }

    //第一次创建数据库的时候,调用onCreate方法(只调用一次)
    @Override
    public void onCreate(SQLiteDatabase db) {
    }

    //数据库版本号升级变更会调用onUpgrade函数(可用来创建新的数据库)
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    /**
     * 添加,更新,删除数据
     * @param database
     * @param sql
     */
    public void operateData(SQLiteDatabase database, final String sql){
        if(sql != null){
            try {
                database.execSQL(sql);
            }catch (SQLException e){
                Log.e("OperateData", "operateData: " + e.toString());
            }
        }

    }

    /**
     * 查询数据
     * @param database
     * @param sql
     */
    public Cursor queryData(SQLiteDatabase database, final String sql){
        Cursor cursor;
        if (sql != null){
            try {
                cursor = database.rawQuery(sql, null);
                return cursor;
            }catch (SQLException e){
                Log.e("QueryData", "queryData: "+ e.toString() );
            }
        }
        return null;
    }

下面是SQLiteDBHelper的执行接口

public class SqlExecute {
    private final static String dbName = "user";    //数据库名称
    private final static int db_version = 1;        //版本号
    private SQLiteDBHelper sqLiteDBHelper = null;
    private SQLiteDatabase database = null;
    private static SqlExecute sqlExecute = null;

    public static SqlExecute getInstance(){
        if(sqlExecute == null){
            sqlExecute = new SqlExecute();
        }
        return sqlExecute;
    }

    /**
     * 创建数据库
     * @param context
     */
    public void inIntDB(Context context){
        sqLiteDBHelper = new SQLiteDBHelper(context, dbName, db_version);
        try {
            database = sqLiteDBHelper.getWritableDatabase();
        }catch (Exception e){
            Log.e("SQLiteDatabase", e.toString());
        }
    }

    /**
     * 增、删、改、创建数据表
     * @param sql
     */
    public void operateData(String sql){

        sqLiteDBHelper.operateData(database, sql);
    }

    /**
     * 查询数据
     * @param sql
     */
    public Cursor queryData(String sql){

        return sqLiteDBHelper.queryData(database, sql);
    }
}
原文地址:https://www.cnblogs.com/QingYiShouJiuRen/p/10791671.html