2010-03-27 47 views
53

我使用的代碼using-your-own-sqlite-database-in-android-applications沒有這樣的表android_metadata,有什麼問題?</p> <p>沒有這樣的表android_metadata</p> <p>我需要:

複製後,我收到上打開數據庫以下日誌消息瞭解到複製預先存在的數據庫/data/data/packagename/databases創建一個名爲android_metadata的表?什麼值我需要插入到這個數據庫表

非常感謝

+3

如果這是解決請接受正確的答案,使其不再標記爲解答。 – Merlin 2011-09-11 22:39:41

回答

2

我已經使用在該鏈接很長時間給..

它的工作原理..再次檢出您的數據庫表創建或沒有?

我喜歡安裝在Firefox的SQLite Manager插件對SQLite數據庫操作..完成所有過程在同一個鏈接後述..

結帳http://www.devx.com/wireless/Article/40842/1954

它包含所有數據庫操作。

107

其實,多一點讀書,我發現我需要 使用SQLiteDatabase.NO_LOCALIZED_COLLATORS標誌調用 SQLiteDatabase.openDatabase()時 - 這不再導致的問題。

+0

SQLiteDatabase.NO_LOCALIZED_COLLATORS確實爲我解決了它! 謝謝。 – 2011-09-11 21:50:13

+0

這個技巧省得我的腦袋。非常感謝。 – 2012-11-24 09:02:55

+2

+1,非常好的回答........謝謝! – 2013-03-02 10:36:14

4

看起來由於某些原因,android要求每個數據庫都有一個名爲android_metadata的表,其中至少包含一個語言環境。您提到的reigndesign博客告訴您如何創建表並使用語言環境預填。

檢查數據庫是否包含此表以及表是否包含某些內容。

2

例如,當您從資產目錄複製數據庫時,必須已經在其中創建了android_metadata表。這個表應該有兩列:

_id = an integer value 
locale = en 
1

就我而言,我發現,如果我離開了open transaction左會發生這種錯誤。換句話說:如果你忘記了commitrollback一個交易,在下一次你輸入你的應用程序時,這個錯誤就會出現。

2

它也可能只是文件權限 - 錯誤信息是誤導性的。首先,你需要找出應用程序的用戶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> 
30

使用

SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY); 

SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE); 
+2

真的很簡單就是這樣。只需向數據庫添加寫入權限,android會自動添加此表。 – Derzu 2012-04-08 20:04:37

+0

我可以在READ_ONLY上使用它嗎? – Siddharth 2015-03-24 03:54:18