核心類
SQLiteOpenHelper:管理數據庫創建/升級。
SQLiteDatabase:執行 SQL、事務、查詢。
Cursor:結果集游標。
完整示例
public class DBHelper extends SQLiteOpenHelper {
static final String DB_NAME = "demo.db";
static final int VERSION = 1;
public DBHelper(Context ctx) { super(ctx, DB_NAME, null, VERSION); }
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE user(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
db.execSQL("DROP TABLE IF EXISTS user");
onCreate(db);
}
}
// 使用
DBHelper helper = new DBHelper(this);
SQLiteDatabase db = helper.getWritableDatabase();
// 插入
ContentValues cv = new ContentValues();
cv.put("name", "Alice");
cv.put("age", 20);
db.insert("user", null, cv);
// 查詢
Cursor c = db.query("user", null, null, null, null, null, null);
while (c.moveToNext()) {
Log.d("DB", c.getString(c.getColumnIndex("name")));
}
c.close();
db.close();
UI 交互綁定
Button btnAdd = findViewById(R.id.btnAdd);
btnAdd.setOnClickListener(v -> {
String name = etName.getText().toString();
int age = Integer.parseInt(etAge.getText().toString());
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("age", age);
db.insert("user", null, cv);
// 刷新列表
cursorAdapter.swapCursor(db.query("user", null, null, null, null, null, null));
});
最佳實踐
- 數據庫操作放在子線程**(RxJava/Coroutines/AsyncTask),避免 ANR。
- 使用 Room** (Jetpack) 替代裸 SQLite,編譯期校驗 SQL、LiveData 自動刷新。
- 事務批量寫入:
db.beginTransaction() ... db.setTransactionSuccessful() ... db.endTransaction()。