zoukankan      html  css  js  c++  java
  • 数据的存储方式: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);
        }
    }
  • 相关阅读:
    关于Lua中的面向对象实现
    当我读《体验引擎:游戏设计全景探秘》时我在想什么
    【Unity】拖动图片生成对应Image
    【Unity】阅读LuaFramework_UGUI的一种方法
    【Unity】关于VS条件编译符号
    Lua元表应用举例:配置表格转为Lua配置表
    对文件夹下的git项目进行批量更新、打包
    二分查找
    python-变量及字符串赋值|今日所学-2017-12-26
    lamda- filter,map, collect
  • 原文地址:https://www.cnblogs.com/QingYiShouJiuRen/p/10791671.html
Copyright © 2011-2022 走看看