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);
网友评论