Android系统集成了一个轻量级的数据库SQLite,sqlite是一个嵌入式的数据库引擎,专门适用于资源有限的设备上做适量的数据存储。
SQLite支持大部分的SQL92语法,允许开发者使用SQL语句操作数据库中的数据。
Android提供了SQLiteDatebase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatebase对象,接下来就可通过SQLiteDatebase对象来管理、操作数据库。
项目中用到了SQLite数据库作为新加载数据的缓存数据,如果请求服务器出现异常的话即从以缓存的数据取数据替代当前请求。主要用到了SQLiteOpenHelper类,SQLiteOpenHelper是Android提供的一个管理数据库的工具类,可以用来管理数据库的创建和版本更新。一般的用法是创建SQLiteOpenHelper的子类,并扩展它的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatebase db, int oldVersion, int newVersion)方法。
SQLiteOpenHelper提供了getReadableDatabase()、getWritableDatabase()两个方法用于打开数据库连接,并提供了close方法来关闭数据库连接,开发者只需要重写它的两个抽象方法即可。onCreate(SQLiteDatabase db)用于初次使用软件时生成数据库表,当调用SQLiteOpenHelper的getReadableDatabase()或者getWritableDatabase()方法获取用于数据库的SQLiteDatebase实例时,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始数据。onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)用于升级软件时更新数据库表结构,方法在数据库的版本发生变化时被调用,该方法调用时oldVersion代表数据库之前的版本号,newVersion代表当前数据库当前的版本号。
附录一段代码:
public static final String DATABASENAME="qq.db";//数据库的名称
public static final int DATABASEVERSION=1;//数据库版本号
public DBHelper(Context context) {
super(context, DATABASENAME, null, DATABASEVERSION);
}
/*
* 数据库第一次调用时创建
* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
*/
@Override
public void onCreate(SQLiteDatabase db) {
try{//创建事务
db.beginTransaction();
db.execSQL("create table if not exists information(_id integer primary key autoincrement ,_content varchar(200)," +
"_time varchar(25), _user varchar(20))");
//记录
db.execSQL("create table if not exists history(_id integer primary key autoincrement," +
"_content varchar(200), _time varchar(25),_sender varchar(30),_receiver varchar(30)" +
",_user varchar(20),_type varchar(2))");
//历史缓存
db.execSQL("create table if not exists hotCache(_id integer primary key autoincrement," +
"_title varchar(200),_time varchar(25),_type varchar(20),_docid varchar(100),_user varchar(20),_host varchar(100))");
//历史缓存
db.execSQL("create table if not exists searchCache(_id integer primary key autoincrement ," +
"_content varchar(200),_keyword varchar(20),_type varchar(10),_time varchar(25), _host varchar(100)," +
"_url varchar(200),_user varchar(20))");
//调用该方法设置事务成功,否则endTransaction将回滚事务
db.setTransactionSuccessful();
}catch(Exception ex){
// db.endTransaction();
ex.printStackTrace();
}finally{
db.endTransaction();
}
}
/*
* 数据库有版本升级时调用
* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists information");
db.execSQL("drop table if exists history");
db.execSQL("drop table if exists hotCache");
db.execSQL("drop table if exists searchCache");
onCreate(db);
}