没有这样的表android_metadata,有什么问题?

时间:2010-03-27 07:14:03

标签: android sqlite

我使用从using-your-own-sqlite-database-in-android-applications

获取的代码将预先存在的数据库复制到/data/data/packagename/databases

复制后,我在打开数据库时收到以下日志消息:

没有这样的表android_metadata

我是否需要创建一个名为android_metadata的表?我需要将这些值插入到此数据库表中

非常感谢

7 个答案:

答案 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会发生此错误。

换句话说:如果您忘记了commitrollback某项交易,则在您下次输入申请时,会出现此错误。