第一種:用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:前幾天面試被面試官問到過這個問題。
文章列表