天天看點

Android幾種打開SQLite的方法

第一種:用SQLiteOpenHelper輔助類

  SQLiteOpenHelper類可以用來建立或打開資料庫,兩個關鍵的方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。當建立一個資料庫時會調用前者,一般在裡面做一些建立表或視圖的操作。資料庫版本更新時則會調用後者。

  當第一次調用getReadableDatabase()方法或getWritableDatabase()方法即可傳回一個SQLiteDatabase對象。如果是第一次調用,則會建立資料庫。随後可使用SQLiteDatabase對象的方法進行資料操作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。

  PS:通過該方法建立的資料庫存放的目錄是固定的,其路徑為/data/data/packageName/databases/

第二種:用Context類的openOrCreateDatabase()方法

  openOrCreateDatabase(String dbName, int mode, CursorFactory factory);

  dbName:資料庫操作模式:預設值為MODE_PRIVATE(0),可選值:MODE_WORLD_READABLE, MODE_WORLD_WRITABLE, MODE_ENABLE_WRITE_AHEAD_LOGGING

  factory:附加的一個工廠類,當SQLiteDatabase執行個體的query函數被調用時,會使用該工廠類傳回一個Cursor。可為null。

PS:該方法得到的資料庫檔案,其存儲路徑與上一方法相同。

第三種:直接調用SQLiteDatabase類的靜态方法openOrCreateDatabases()

SQLiteDatabase類有幾個靜态方法可直接打開或建立資料庫。

//等同于openDatabase(path, factory, SQLiteDatabase.CREATE_IF_NECESSARY)

openOrCreateDatabase(String path, CursorFactory factory)

//等同于openDatabase(file.getPath(), factory, SQLiteDatabase.CREATE_IF_NECESSARY)

openOrCreateDatabase(File file, CursorFactory factory)

//等同于openDatabase(file.getPath(), factory, SQLiteDatabase.CREATE_IF_NECESSARY, errorHandler)

openOrCreateDatabase(String path, CursorFactory factory, DatabaseErrorHandler errorHandler)

PS:該方法打開或建立的資料庫檔案可與上述兩個方法的路徑不同。

還是上個代碼看着更爽

1 //第一種
 2         SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
 3         db.execSQL("alter table info add number1 vchar(20)");
 4 
 5         //第二種
 6         //擷取info.db的路徑
 7         File file = new File(getApplication().getDatabasePath("info.db").getPath());
 8         SQLiteDatabase db1 = SQLiteDatabase.openOrCreateDatabase(file,null);
 9         db1.execSQL("alter table info add number2 vchar(20)");
10 
11         //第三種,
12         SQLiteDatabase db2 = this.openOrCreateDatabase("info.db",0,null);
13         db.execSQL("alter table info add number3 vchar(20)");      

ps:前幾天面試被面試官問到過這個問題。

轉載于:https://www.cnblogs.com/Godfunc/p/6022102.html