SQLiteOpenHelper是單例模式管理數據庫連接。整個應用進程中應只有一個實例,所有Activity共享同一個`SQLiteDatabase`對象(通過`getWritableDatabase()`/`getReadableDatabase()`獲取)。
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static MyDatabaseHelper instance;
private static final String DB_NAME = "UserDB.db";
private static final int DB_VERSION = 1;
// 表結構定義(去除尾部逗號,規範SQL)
private static final String CREATE_USER =
"CREATE TABLE USER (username TEXT, usermima TEXT)";
private static final String CREATE_STU =
"CREATE TABLE STU (id TEXT PRIMARY KEY, name TEXT, num TEXT)";
private MyDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
public static synchronized MyDatabaseHelper getInstance(Context context) {
if (instance == null) {
instance = new MyDatabaseHelper(context.getApplicationContext());
}
return instance;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_USER);
db.execSQL(CREATE_STU);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
// 版本升級邏輯:備份數據、刪表、重建、恢復
}
}
// Activity A 操作 USER 表
MyDatabaseHelper helper = MyDatabaseHelper.getInstance(this);
SQLiteDatabase db = helper.getWritableDatabase();
// 插入
ContentValues values = new ContentValues();
values.put("username", "zhangsan");
values.put("usermima", "123456");
db.insert("USER", null, values);
// Activity B 操作 STU 表(同樣獲取helper實例)
MyDatabaseHelper helper = MyDatabaseHelper.getInstance(this);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.query("STU", null, null, null, null, null, null);
建議為每張表創建對應DAO類(`UserDao`、`StuDao`),內部持有`MyDatabaseHelper`引用,暴露`insert`、`query`、`update`、`delete`方法,Activity只調用DAO,不直接寫SQL。