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

我正在复制一个预先存在的数据库到/data/data/packagename/databases使用的代码学习using-your-own-sqlite-database-in-android-applications

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

没有这样的表android_metadata

我是否需要创build一个名为android_metadata的表? 什么值我需要插入到这个数据库表

非常感谢

实际上,多读一点,我发现在调用SQLiteDatabase.openDatabase()时需要使用SQLiteDatabase.NO_LOCALIZED_COLLATORS标志 – 这不会再导致问题。

使用

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

要么

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

看起来由于某些原因,android要求每个数据库都有一个名为android_metadata的表,至less包含一个语言环境。 你提到的reigndesign博客告诉你如何创build表并预先填充一个语言环境。

检查你的数据库是否包含这个表,以及表是否有一些内容。

我已经使用了很长一段时间的链接

它的工作..再次检查您的数据库表创build或不?

我更喜欢安装sqlitepipe理器插件在firefox中为sqlite数据库操作..完成所有过程中提到的相同的链接..

结帐http://www.devx.com/wireless/Article/40842/1954

它包含所有的数据库操作。

它也可能只是文件权限 – 错误信息是误导性的。 首先你需要找出应用程序的用户名(假设你有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> 

例如,当从资产目录中复制数据库时,您必须已经创build了android_metadata表。 这个表应该有两列:

 _id = an integer value locale = en 

就我而言,我发现如果我离开一个open transaction就会发生这个错误。

换句话说:如果您忘记commitrollback事务,那么在下次您input应用程序时,此错误就会升起。