SQLiteOpenHelper類是Android平台提供的用於SQLite數據庫的創建、打開以及版本管理的幫助類。一般需要繼承並這個類並實現它的onCreate和onUpgrade方法,在構造方法中調用SQLiteOpenHelper類的構造方法。
在實際應用中一般是先創建一個繼承自SQLiteOpenHelper類的輔助類的實例,在調用該實例的getWritableDatabase()或getReadableDatabase()方法獲取SQLiteDataBase對象。
SQLiteOpenHelper類的構造方法:
SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version)
context 上下文環境
name 要創建或打開的數據庫名稱
factory 用於數據查詢的時候實例化一個游標,一般為null
version 數據庫版本號,不能小於1
onCreate(SQLiteDatabase db)方法:當首次創建數據庫時調用該方法,一般進行創建表等初始化操作;
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法:當傳入的數據庫版本號大於當前的數據庫版本是會調用該方法,可以在這個方法里進行數據庫的更改升級;
另外還可以選擇實現onDowngrade方法和onOpen方法:
當傳入的數據庫版本號小於數據庫當前的版本號時,會調用onDowngrade方法;
onOpen方法在onCreate、onUpgrade、onDowngrade之后被調用。
SQLiteOpenHelper的getWritableDatabase()和getReadableDatabase()方法:
一般情況下getReadableDatabase()與getWritableDatabase()返回的都是可讀寫的數據庫對象,只有在數據庫僅開放只讀權限或磁盤已滿時getReadableDatabase()方法才會返回一個只讀的數據庫對象。
實際上在SQLiteOpenHelper類的構造方法中並未進行數據庫的打開或創建,而是在getWritableDatabase()和getReadableDatabase()中打開或創建數據庫。
示例代碼:
SqliteHelper類:
public class SqliteHelper extends SQLiteOpenHelper {
public SqliteHelper(Context context,String dbname,int version) {
super(context, dbname, null, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sql_user="create table if not exists user("
+"username text primary key,"
+"userpwd text)";
db.execSQL(sql_user);// 創建一個用戶表
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
public void deleteTable(SQLiteDatabase db, String name) {
String sql_delteTable = "DROP TABLE if exists " + name;
db.execSQL(sql_delteTable);
}
}
DBManager 類:(進行數據查詢和增刪改)
public class DBManager {
private SqliteHelper helper = null;
private SQLiteDatabase db = null;
/**
* 構造函數
*
* @param context
*/
public DBManager(Context context) {
helper = new SqliteHelper(context,"test.db",1);
db = helper.getWritableDatabase();
}
/**
* 關閉數據庫
*/
public void Close() {
if (db != null) {
helper.close();
}
}
/**
* 添加用戶
*
* @return the row ID of the newly inserted row, or -1 if an error occurred
*/
public long AddUser() {
ContentValues values = new ContentValues();
values.put("username", "kitty");
values.put("userpwd", "123456");
return db.insertOrThrow("user", null, values);
}
/**
* 驗證賬戶是否存在
*
* @param username
* @return boolean
*/
public boolean CheckUsername(String username) {
String sql = "select username from user where username=?";
Cursor cursor = db.rawQuery(sql, new String[] { username });
return (cursor.getCount() > 0);
}
/**
* 驗證登錄信息
*
* @param username
* 賬戶
* @param password
* 密碼
* @return 0-驗證通過 1-賬戶不存在 2-密碼錯誤
*/
public int VerifyLogin(String username, String password) {
String sql = "select * from user where username=? and userpwd=?";
Cursor cursor = db.rawQuery(sql, new String[] { username, password });
if (cursor.getCount() > 0) {
return 0;
} else {
if (!CheckUsername(username)) {
return 1;
} else {
return 2;
}
}
}
}