我使用的代碼using-your-own-sqlite-database-in-android-applications沒有這樣的表android_metadata,有什麼問題?</p> <p>沒有這樣的表android_metadata</p> <p>我需要:
複製後,我收到上打開數據庫以下日誌消息瞭解到複製預先存在的數據庫/data/data/packagename/databases
創建一個名爲android_metadata的表?什麼值我需要插入到這個數據庫表
非常感謝
我使用的代碼using-your-own-sqlite-database-in-android-applications沒有這樣的表android_metadata,有什麼問題?</p> <p>沒有這樣的表android_metadata</p> <p>我需要:
複製後,我收到上打開數據庫以下日誌消息瞭解到複製預先存在的數據庫/data/data/packagename/databases
創建一個名爲android_metadata的表?什麼值我需要插入到這個數據庫表
非常感謝
我已經使用在該鏈接很長時間給..
它的工作原理..再次檢出您的數據庫表創建或沒有?
我喜歡安裝在Firefox的SQLite Manager插件對SQLite數據庫操作..完成所有過程在同一個鏈接後述..
結帳http://www.devx.com/wireless/Article/40842/1954。
它包含所有數據庫操作。
其實,多一點讀書,我發現我需要 使用SQLiteDatabase.NO_LOCALIZED_COLLATORS
標誌調用 SQLiteDatabase.openDatabase()
時 - 這不再導致的問題。
SQLiteDatabase.NO_LOCALIZED_COLLATORS確實爲我解決了它! 謝謝。 – 2011-09-11 21:50:13
這個技巧省得我的腦袋。非常感謝。 – 2012-11-24 09:02:55
+1,非常好的回答........謝謝! – 2013-03-02 10:36:14
看起來由於某些原因,android要求每個數據庫都有一個名爲android_metadata的表,其中至少包含一個語言環境。您提到的reigndesign博客告訴您如何創建表並使用語言環境預填。
檢查數據庫是否包含此表以及表是否包含某些內容。
例如,當您從資產目錄複製數據庫時,必須已經在其中創建了android_metadata表。這個表應該有兩列:
_id = an integer value
locale = en
就我而言,我發現,如果我離開了open transaction
左會發生這種錯誤。換句話說:如果你忘記了commit
或rollback
一個交易,在下一次你輸入你的應用程序時,這個錯誤就會出現。
它也可能只是文件權限 - 錯誤信息是誤導性的。首先,你需要找出應用程序的用戶ID(這是假設你有root權限):
$ adb shell grep <packagename> /data/system/packages.xml
輸出應該是這樣的:在這裏
<package name="com.fsck.k9" codePath="/data/app/com.fsck.k9-1.apk"
nativeLibraryPath="/data/data/com.fsck.k9/lib"
flags="0" ft="1306ecac340" it="1306ecac9d2" ut="1306ecac9d2"
version="14001" userId="10002">
用戶id爲10002。
然後修復權限:
$ adb shell chown -R 10002:10002 /data/data/<packagename>
使用
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
或
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE);
如果這是解決請接受正確的答案,使其不再標記爲解答。 – Merlin 2011-09-11 22:39:41