sqlite与android没有这样的表

时间:2011-06-26 14:32:33

标签: android

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

由于似乎无法在手机上看到数据库,我认为,我无法看到如何找出导致问题的原因并采取措施避免这种情况。数据库似乎在程序开始时打开,但在处理选择查询时出错。只是更改表的名称不能解决它,它必须是一个新的数据库名称。

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

我还发现,在成功插入行之后,稍后将游标发送到allitems有时会对其中一个列名称的get获取-1错误。列名如何从列索引中删除?

我已经搜索了这类问题,虽然有很多人都有问题和很多回复,但我找不到任何有关这些问题的根本原因的信息 - 这就是我所追求的。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

请明确链接到您引用的示例。 我理解它的方式是,您在启动时创建自己的数据库,除非设备上已存在数据库,在这种情况下会跳过数据库创建。正确的吗?

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

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