android--getWritableDatabase()和getReadableDatabase()差異測試

getWritableDatabase()和getReadableDatabase()都可以傳回一個SQLiteDatabase,傳回的物件是一樣的。
getWritableDatabase()會以讀寫模式開啟資料庫,但是如果資料庫因故無法寫入,則開啟時會出現錯誤。
getReadableDatabase()會先執行getWritableDatabase(),以讀寫模式開啟資料庫,如果發現無法寫入,則會以唯讀方式開啟資料庫

專案名稱:com.ccc.app05

查目前執行中的 Device
c:\adb> adb devices
List of devices attached
emulator-5554   device

連接 Device
c:\adb> adb -s emulator-5554 shell

進入專案的SQLite DB的路徑
root@android:/ # cd /data/data/com.ccc.app05/databases/
root@android:/data/data/com.ccc.app05/databases # ls
TESTDB01
TESTDB01-journal

將資料庫更改成唯讀
root@android:/data/data/com.ccc.app05/databases # chmod 400 TESTDB01
chmod 400 TESTDB01

root@android:/data/data/com.ccc.app05/databases # chmod 400 TESTDB01-journal
chmod 400 TESTDB01-journal

確認已更改成唯讀
root@android:/data/data/com.ccc.app05/databases # ll
-r-------- u0_a49   u0_a49      24576 2013-10-02 00:44 TESTDB01
-r-------- u0_a49   u0_a49      12824 2013-10-02 00:44 TESTDB01-journal


com.ccc.app05會開啟SQLite資料庫,新增一筆May的資料並將John的資料顯示出來

先將SQLite以getWritableDatabase()開啟,如下:












執行結果:
















將SQLite改以getReadableDatabase()開啟
  











結果如下,新增紀錄失敗,但是可以讀取John的資料: