没有这样的表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
就会发生这个错误。
换句话说:如果您忘记commit
或rollback
事务,那么在下次您input应用程序时,此错误就会升起。