SQLite数据库存储--创建、升级数据库

作者: 大话程序 | 来源:发表于2016-05-12 10:44 被阅读855次

    SQLite数据库存储--创建、升级数据库

    SQLite是一款轻量级的关系型数据库

    创建数据库

    Android为了让我们能够更加方便的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,借助这个类就可以简单地对数据库进行创建和升级

    创建、升级数据库函数

    SQLiteOpenHelper类是一个抽象类,SQLiteOpenHelper类中有两个抽象方法,分别是onCreate()onUpgrade()方法:

    • onCreate()方法是实现创建数据库的逻辑,数据库文件会存放在/data/data/(packageName)/database/目录下
    • onUpgrade()方法是实现升级数据库的逻辑,当实例化SQLiteOpenHelper子类对象时,传入的参数version大于当前数据库的版本号时,当调用getReadableDatabase()getWritableDatabase()时,就会调用此升级方法

    获取数据库对象

    SQLiteOpenHelper中还有两个重要的实例方法,getReadableDatabase()getWritableDatabase()

    • 这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库<调用重写的onCreate()方法>),并返回一个可对数据库进行读写操作的对象
    • 当数据库不可写入的时候,getReadableDatabase()方法返回的对象将以只读的方式打开数据库,而getWritableDatabase()方法则会出现异常

    SQLiteOpenHelper构造方法

    继承SQLiteOpenHelper,重写构造函数(四个参数):
    public DatabaseHalper(Context context, String name, CursorFactory factory, int version) {}

    • context:Context对象(上下文对象)。若程序在测试框架中测试代码用于生成数据库对象,则此时context对象可以利用函数getContext()获得
    • name:数据库名称
    • factory:游标工厂,允许我们在查询数据的时候返回一个自定义的Cursor,一般传入null
    • version:当前数据库的版本号

    注意:SQLiteOpenHelper子类对象是必须和某个数据库绑定起来的,当调用getReadableDatabase()getWritableDatabase()时,若数据库已存在则返回数据库对象;若数据库不存在,则调用onCreate()方法,创建数据库并返回数据库对象

    SQLite简单知识

    SQLite数据类型很简单:
    • integer:表示整型;
    • real:表示浮点型
    • text:表示文本类型
    • blob:表示二进制类型
    创建一个类继承SQLiteOpenHelper
    public class MyDatabaseHalper extends SQLiteOpenHelper {
        
        public static final String CREATE_BOOK = "create table Book ("
                + "id integer primary key autoincrement,"
                + "author text,"
                + "price real,"
                + "pages integer,"
                + "name text)";
    
        //定义一个Context
        private Context mContext;
        
        public MyDatabaseHalper(Context context, String name,
                CursorFactory factory, int version) {
            super(context, name, factory, version);
            //赋值语句
            mContext = context;
        }
        
        @Override
        public void onCreate(SQLiteDatabase db) {
            //执行SQL语句,创建数据库表Book和Category
            db.execSQL(CREATE_BOOK);
        }
        
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
        
    }
    
    创建数据库,逻辑代码:
    public class MainActivity extends Activity {
        
        private MyDatabaseHalper dbHelper;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //实例化数据库帮助类
            dbHelper = new MyDatabaseHalper(this, "BookStore.db", null, 1);
            
            Button createDatabase = (Button) findViewById(R.id.create_database);
            createDatabase.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                /**
                 *调用获取数据库对象的方法,若数据库存在直接返回数据库对象,不存在
                 *则调用数据库帮助类的onCreate()方法然后返回数据库对象;若数据库的版
                 *本和当前版本一致则不调用onUpgrade()方法,若高于当前数据库的版本
                 *,则调用onUpgrade(),若低于当前数据库的版本,则会抛出异常
                 */
                    dbHelper.getWritableDatabase();
                }
            });
        }
    }
    

    查看数据库:

    创建的数据库
    • BookStore.db:即为新创建的数据库
    • BookStore.db-journal:为了能让数据库能够支持事务而产生的临时日志文件,文件大小通常为0字节

    使用adb shell 命令来查看数据库:

    • 在SDK中的platform-tool目录下有一个adb命令,在windows的环境变量中配置此路径
    • 进入到adb shell命令


      进入shell命令
    • 进入到数据库所在的文件目录


      创建的数据库
    • 进入数据库,查询数据库表


      数据库和表
    • 使用.exit命令即可退出shell命令
    升级数据库(添加一个数据库表),逻辑代码
    • 重写SQLiteOpenHelper类中的onUpgrade()方法

      //添加创建数据库表的语句
      public static final String CREATE_CATEGORY = "create table Category ("
              + "id integer primary key autoincrement,"                     
              + "category_name text,"                                       
              + "category_code integer)";                                   
      --
      //若数据库表则删除表
      db.execSQL("drop table if exists Book");
      db.execSQL("drop table if exists Category");
      //调用onCreate()方法
      onCreate(db);
      --
      //在onCreate()方法中添加创建数据库表的代码
      db.execSQL(CREATE_CATEGORY);
      
    • 在活动类中更改以下代码

      //在实例化SQLiteOpenHelper类的时候,指定的version值大于当前数据库的版本号即可,会自动调用onUpgrade()方法 
      dbHelper = new MyDatabaseHalper(this, "BookStore.db", null, 2);
      

    相关文章

      网友评论

        本文标题:SQLite数据库存储--创建、升级数据库

        本文链接:https://www.haomeiwen.com/subject/pzsyrttx.html