簡體   English   中英

SQLiteOpenHelper如何返回SQLiteDatabase?

[英]How can SQLiteOpenHelper return SQLiteDatabase?

我知道SQLiteDatabase沒有任何公共構造函數,因此無法直接創建其對象。

但是, SQLiteOpenHelper如何使用getReadableDatabase()getWritableDatabase()返回SQLiteDatabase引用?

僅僅因為構造函數不是public / visible並不意味着它不存在!

SQLiteOpenHelper使用SQLiteDatabase的靜態構造函數openDatabase創建一個新的數據庫實例。 它是公開的,並且沒有被隱藏,因此,盡管這可能不是一個好主意,但您可以自己直接調用它。

根據文檔,您可以這樣使用它:

   SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null); 

第一個參數是一個字符串,它提供新數據庫的完整路徑名。 第二個是游標工廠。 為第二個arg傳遞null將為您提供默認工廠。

使用SQLiteOpenHelper確保正確創建和正確初始化數據庫。 它還會適當地緩存數據庫實例,這樣就不會在您每次需要它們時都重新創建它們。 最好使用它。

嘗試這個:

Cdb.java類:

public class Cdb extends SQLiteOpenHelper {

    private static final String DB_NAME = "db_name.db";
    public static final int DB_VERSION = 1;

    Cdb(Context context) {
        super(context.getApplicationContext(), DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        // Upgrade here
    }

    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);

}

然后您可以按以下方式訪問數據庫:

Cdb openHelper = new Cdb(this);
SQLiteDatabase db = openHelper.getReadableDatabase();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM