我使用从using-your-own-sqlite-database-in-android-applications
获取的代码将预先存在的数据库复制到/data/data/packagename/databases
复制后,我在打开数据库时收到以下日志消息:
没有这样的表android_metadata
我是否需要创建一个名为android_metadata的表?我需要将这些值插入到此数据库表中
非常感谢
答案 0 :(得分:107)
实际上,通过阅读更多,我发现我需要
调用时使用SQLiteDatabase.NO_LOCALIZED_COLLATORS
标志
SQLiteDatabase.openDatabase()
- 这不再导致问题。
答案 1 :(得分:30)
使用
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
或
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE);
答案 2 :(得分:4)
似乎由于某种原因,android要求每个数据库都有一个名为android_metadata的表,其中至少包含一个语言环境。您提到的reigndesign博客会告诉您如何创建表格并使用区域设置预填充它。
检查您的数据库是否包含此表以及该表是否包含某些内容。
答案 3 :(得分:3)
例如,当您从资产目录中复制数据库时,您必须已在其中创建了android_metadata表。该表应该有两列:
_id = an integer value
locale = en
答案 4 :(得分:2)
我已经在该链接中使用了很长时间..
它有效..再次检查你的数据库是否创建了表?
我更喜欢在firefox中安装SQLite Manager插件以进行sqlite数据库操作..在完成同一链接中提到的所有进程之后..
结帐http://www.devx.com/wireless/Article/40842/1954。
它包含所有数据库操作。
答案 5 :(得分: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">
userId这里是10002。
然后修复权限:
$ adb shell chown -R 10002:10002 /data/data/<packagename>
答案 6 :(得分:1)
在我的情况下,我发现如果我离开open transaction
会发生此错误。
换句话说:如果您忘记了commit
或rollback
某项交易,则在您下次输入申请时,会出现此错误。