SQLiteOpenHelper繼承該類並實現兩個關鍵方法:
onCreate(SQLiteDatabase db):資料庫首次建立時調用,執行建表 SQL。onUpgrade(SQLiteDatabase db, int oldV, int newV):版本號升級時調用,處理結構遷移。public class BookStoreDbHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "bookstore.db";
private static final int DB_VERSION = 1;
// 建表 SQL
private static final String SQL_CREATE_BOOKS =
"CREATE TABLE books (" +
" _id INTEGER PRIMARY KEY AUTOINCREMENT," +
" title TEXT NOT NULL," +
" author TEXT," +
" price REAL," +
" publish_date TEXT" +
");";
public BookStoreDbHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_BOOKS);
// 可插入初始測試資料
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
// 簡單策略:刪表重建(生產環境需 ALTER TABLE 遷移資料)
db.execSQL("DROP TABLE IF EXISTS books");
onCreate(db);
}
// 便利方法:新增、查詢、更新、刪除
public long insertBook(String title, String author, double price, String date) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("title", title);
cv.put("author", author);
cv.put("price", price);
cv.put("publish_date", date);
return db.insert("books", null, cv);
}
}
BookStoreDbHelper helper = new BookStoreDbHelper(this);
long rowId = helper.insertBook("Android 進階", "張三", 59.0, "2023-05-01");
/data/data/你的包名/databases/bookstore.db(需 Root 或 run-as 才能直接查看)。
db.beginTransaction() / setTransactionSuccessful() / endTransaction()。