SQLite数据库
- 轻量级关系型数据库
创建数据库需要使用的api:SQLiteOpenHelper
必须定义一个构造方法:
//arg1:数据库文件的名字 //arg2:游标工厂 //arg3:数据库版本 public MyOpenHelper(Context context, String name, CursorFactory factory, int version){}
- 数据库被创建时会调用:onCreate方法
- 数据库升级时会调用:onUpgrade方法
创建数据库
//创建OpenHelper对象
MyOpenHelper oh = new MyOpenHelper(getContext(), "person.db", null, 1);
//获得数据库对象,如果数据库不存在,先创建数据库,后获得,如果存在,则直接获得
SQLiteDatabase db = oh.getWritableDatabase();
- getWritableDatabase():打开可读写的数据库
- getReadableDatabase():在磁盘空间不足时打开只读数据库,否则打开可读写数据库
getWritableDatabase() 和 getReadableDatabase() 方法都可以获取一个用于操作数据库的SQLiteDatabase实例。其中 getReadableDatabase() 方法中会调用 getWritableDatabase()方法。
其中getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。
getReadableDatabase() 方法则是先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。如果该问题成功解决,则只读数据库对象就会关闭,然后返回一个可读写的数据库对象。
在创建数据库时创建表
public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("create table person (_id integer primary key autoincrement, name char(10), phone char(20), money integer(20))"); }
数据库创建、创建表
public class MyOpenHelper extends SQLiteOpenHelper { public MyOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } //数据库创建时,此方法会调用 @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table person(_id integer primary key autoincrement, name char(10), salary char(20), phone integer(20))"); } //数据库升级时,此方法会调用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { System.out.println("数据库升级了"); } }
单元测试
public class TestCase extends AndroidTestCase { //此时测试框架还没有初始化完毕,没有虚拟上下文对象 public void test(){ //getContext():获取一个虚拟的上下文 MyOpenHelper oh = new MyOpenHelper(**getContext()**, "people.db", null, 1); //如果数据库不存在,先创建数据库,再获取可读可写的数据库对象,如果数据库存在,就直接打开 SQLiteDatabase db = oh.getWritableDatabase(); //如果存储空间满了,那么返回只读数据库对象 // SQLiteDatabase db = oh.getReadableDatabase(); } }