首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android SQLiteOpenHelper 創建資料庫與資料表完整範例

     編輯:程式設計疑難解答

核心類: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 才能直接查看)。

最佳實踐

  • 單例模式管理 Helper 實例,避免多實例導致資料庫鎖定。
  • 大量寫入使用 db.beginTransaction() / setTransactionSuccessful() / endTransaction()。
  • 考慮 Room 框架(官方 ORM),編譯期驗證 SQL、LiveData/RxJava 整合、遷移測試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved