没有这样的表android#u元数据,什么';问题出在哪里?

没有这样的表android#u元数据,什么';问题出在哪里?,android,sqlite,Android,Sqlite,我正在使用从中学习的代码将预先存在的数据库复制到/data/data/packagename/databases 复制后,我在打开数据库时收到以下日志消息: 没有这样的表和元数据 我需要创建一个名为android\u metadata的表吗?我需要在这个数据库表中插入哪些值 非常感谢我已经使用该链接中给出的内容很长时间了 它起作用了。。是否在创建的表中再次签出数据库 我更喜欢在firefox中安装SQLite管理器插件,用于SQLite数据库操作。。完成同一链接中提到的所有流程后 结帐 它包含了

我正在使用从中学习的代码将预先存在的数据库复制到
/data/data/packagename/databases

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

没有这样的表和元数据

我需要创建一个名为android\u metadata的表吗?我需要在这个数据库表中插入哪些值


非常感谢

我已经使用该链接中给出的内容很长时间了

它起作用了。。是否在创建的表中再次签出数据库

我更喜欢在firefox中安装SQLite管理器插件,用于SQLite数据库操作。。完成同一链接中提到的所有流程后

结帐


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

事实上,再多读一点,我发现我需要
调用时使用
SQLiteDatabase.NO\u LOCALIZED\u COLLATORS
标志
SQLiteDatabase.openDatabase()
-这不再会导致问题。

似乎出于某种原因,android要求每个数据库都有一个名为android\u metadata的表,其中至少包含一个区域设置。您提到的博客告诉您如何创建表并使用区域设置对其进行预填充


检查您的数据库是否包含此表,以及该表是否包含某些内容。

例如,当您从资产目录复制数据库时,必须已经在其中创建了android_元数据表。此表应包含两列:

_id = an integer value
locale = en

在我的例子中,我发现如果我离开一个
打开的事务
,就会发生这个错误


换句话说:如果您忘记提交事务或回滚事务,则在下次输入应用程序时,会出现此错误。

这也可能只是文件权限-错误消息具有误导性。首先,您需要找出应用程序的用户id(假设您具有root访问权限):

$adb shell grep/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>
$adb shell chown-R 10002:10002/data/data/
使用


如果此问题已解决,请接受正确答案,以便不再将其标记为未回答。SQLiteDatabase.no_本地化\u COLLATORS为我解决了此问题!谢谢。这个小费省省了我的钱。非常感谢。真的很简单。只需向数据库添加写入权限,android就会自动添加此表。我是否可以将此表与只读一起使用?
$ adb shell chown -R 10002:10002 /data/data/<packagename>
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE);