【问题标题】:sqlite with android no such table带有android的sqlite没有这样的表
【发布时间】:2012-12-05 17:35:40
【问题描述】:

我一直在测试我的应用程序,它使用 Reto Meir 地震示例中的 dbadapter。几天来一切都很好,但是今天在设备上使用应用程序进行调试时,我得到了“没有这样的表”错误。我更改了数据库的名称,一切都再次运行良好。这并没有让我对潜在的其他用户充满信心。

由于似乎无法在手机上查看数据库,我想按照设计,我看不到如何找出导致问题的原因并采取措施避免问题。数据库在程序开始时似乎可以正常打开,但在处理选择查询时出现错误。只是更改表的名称并不能解决问题,它必须是一个新的数据库名称。

由于名称的更改允许它运行正常,我看不出代码是错误的。我想知道数据是否损坏了。

我还发现,在成功插入一行后,稍后将光标移至 allitems 有时会在获取其中一个列名时产生 -1 错误。列名如何从列索引中删除?

我已经用谷歌搜索了这类问题,虽然有很多人遇到这个问题并且有很多回复,但我找不到任何可以说明这些问题的根本原因的信息 - 这就是我所追求的。

【问题讨论】:

  • 向我们展示一些代码和完整的异常。
  • 您可以使用 Eclipse 的 Android 插件的 DDMS 视图从您的设备或模拟器复制数据库。在那里您会找到一个文件资源管理器,您可以使用它导航到您的应用程序目录 (/data/data/[您的应用程序的包名称]/databases/)。然后,您可以将数据库文件拉到您的计算机上并打开它,例如使用SQLite Manager for Firefox
  • @Flo:这只适用于模拟器,不适用于设备。
  • @CommensWare:好吧,我不知道。谢谢你的信息。

标签: android


【解决方案1】:

我遇到了同样的问题。我正在更改版本号,卸载应用程序等......最后是因为我没有提交sql调用的事务。为了清楚起见,可能值得查看以下答案 - https://stackoverflow.com/a/13568419/1634369

【讨论】:

    【解决方案2】:

    数据库在手机上可用,如果你可以'adb shell'到手机,你也可以使用sqlite3命令行shell来连接、检查、查询和修改你的数据库。它的功能与使用 oracle 或 mysql 的命令行工具几乎相同。

    您可以在此处查看更多详细信息,例如: http://www.infinitezest.com/articles/using-sqlite-from-shell-in-android.aspx

    至于“没有这样的表”的情况 - 这实际上取决于您存储数据库的位置。您可以选择(在创建数据库时)存储数据库的位置 - 它可能是应用程序所在的内部 /data/data (通常)文件夹,或者您可以(错误地)在缓存空间中创建它 - 可以随时清理缓存每当 Android 的操作系统发现它需要更多空间时,这或许可以解释为什么您的数据库消失了。

    另一种可能性是,您没有重新安装应用程序,而是将其卸载并分两步安装。卸载应用程序还会删除应用程序的所有私有数据(在大多数手机上,但不是全部),而重新安装应用程序(例如通过单击 eclipse 中的运行)不会删除数据。在任何情况下 - 在您应用程序的 onCreate 中,您应该重新创建包括所有表的数据库 - 如果您发现它尚未创建,则始终如此 - 因为您永远不知道您是第一次运行应用程序还是随后运行应用程序。

    【讨论】:

      【解决方案3】:

      请明确链接到您引用的示例。 按照我的理解,您在启动时创建自己的数据库,除非该数据库已经存在于设备上,在这种情况下,将跳过数据库创建。对吗?

      如果这是正确的,那么您唯一需要做的就是在更新数据库设计时卸载应用程序(删除旧数据库,使用旧表名等)并重新安装,所以数据库是用新的表名重新创建。

      否则,您将尝试使用过时的数据库来更新应用程序代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-12
        • 1970-01-01
        • 2017-11-11
        • 2012-10-16
        • 2013-03-07
        • 2015-04-20
        • 1970-01-01
        相关资源
        最近更新 更多