【问题标题】:No such table android_metadata, what's the problem?没有这个表android_metadata,有什么问题?
【发布时间】:2010-03-27 07:14:03
【问题描述】:

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

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

没有这样的表android_metadata

我需要创建一个名为 android_metadata 的表吗?我需要在这个数据库表中插入什么值

非常感谢

【问题讨论】:

  • 如果问题得到解决,请接受正确的答案,以便不再将其标记为未回答。

标签: android sqlite


【解决方案1】:

实际上,通过阅读更多内容,我发现我需要 调用时使用SQLiteDatabase.NO_LOCALIZED_COLLATORS 标志 SQLiteDatabase.openDatabase() - 这不再导致问题。

【讨论】:

  • SQLiteDatabase.NO_LOCALIZED_COLLATORS 确实为我解决了这个问题!谢谢。
  • 这个技巧可以节省我的注意力。非常感谢。
【解决方案2】:

使用

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

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

【讨论】:

  • 真的很简单。只需给数据库添加写权限,android会自动添加这个表。
  • 我也可以将它与 READ_ONLY 一起使用吗?
【解决方案3】:

似乎出于某种原因,android 要求每个数据库都有一个名为 android_metadata 的表,其中至少包含一个语言环境。您提到的reigndesign 博客告诉您如何创建表并使用语言环境预填充它。

检查您的数据库是否包含该表以及该表是否有一些内容。

【讨论】:

    【解决方案4】:

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

    _id = an integer value
    locale = en
    

    【讨论】:

      【解决方案5】:

      我已经在该链接中使用了很长时间..

      它有效.. 再次检查您的数据库是否创建了表?

      我更喜欢在 firefox 中安装 SQLite Manager 插件以进行 sqlite 数据库操作.. 完成同一链接中提到的所有过程之后..

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

      它包含所有数据库操作。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          在我的例子中,我发现如果我留下一个open transaction 就会发生这个错误。

          换句话说:如果您忘记commitrollback 一个事务,在您下次输入您的应用程序时,就会出现此错误。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-05-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多