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

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命令
  • 进入到数据库所在的文件目录


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


    SQLite数据库存储--创建、升级数据库_第1张图片
    数据库和表
  • 使用.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数据库存储--创建、升级数据库)