关于SQLite数据库的问题,出现了“no such table”错误。

11

我打开了一个sqlite数据库并使用rawquery获取数据。

但是log.e显示如下信息:

android.database.sqlite.SQLiteException: 没有这个表格: types:

但是,我真的有这个table。

我还尝试使用其他sql语句,但也得到了错误信息,例如:

android.database.sqlite.SQLiteException: 没有这个表格: malls:

我确定这两个表都存在。那么为什么会得到错误消息呢?


嘿,你能告诉我 rawquery 的样子吗? 表名分别是 "types:" 和 "malls:" 吗? - TheChange
你真的会用 CREATE TABLE... 命令来创建数据库吗? - tbruyelle
实际上,我已经有一个数据库文件了。所以我只是把它放在“assets”文件夹中。然后我创建了一个自定义的SQLiteOpenHelper来复制这个文件到路径:/data/data/com.SGMalls/databases/mallMapv2.sqlite 然后使用Sqlitedatabse.open(); 打开此数据库并尝试获取数据。 - user275788
rawquery Cursor cursor=myDataBase.rawQuery(queryString, null); 我已经在Sqlitebrowser中测试了这个queryString,可以正常获取数据。 - user275788
这个数据库很大。所以这是问题的原因吗?因为我写了自定义的SQLiteOpenHelper,来自“在Android应用程序中使用自己的SQLite数据库”http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ 所以复制文件的代码可能无法完整复制文件。 是这样吗? - user275788
你能告诉我是什么解决了你的问题吗?我也遇到了类似的情况,确实需要一些帮助! - Anand Sainath
4个回答

11

如果您正在模拟器上操作,可以使用 DDMS 文件浏览器或 adb pull 命令下载数据库文件的副本并确认其内容。

我创建了一个自定义的 SQLiteOpenHelper 将该文件复制到路径: /data/data/com.SGMalls/databases/mallMapv2.sqlite

如果您尝试在 SQLiteOpenHelperonCreate() 中复制文件,则为时已晚。建议在此之前进行复制。

因此,复制文件的代码可能无法复制完整的文件。

在这种情况下,更有可能会出现有关损坏文件的错误信息。


好的,非常感谢。那么,如果我想在设备上测试这段代码,还需要先将SQLite数据库粘贴到设备中吗?哦,我需要仔细阅读一篇教程。谢谢。 - user275788
你好。如你所说:我使用DDMS文件浏览器来提取数据库文件。我发现有三个文件夹:data,sdcard和system。那么任何一个都可以吗?这个文件的路径也是/data/data/com.SGMalls/databases/mallMapv2.sqlite吗?谢谢。 - user275788
如果您尝试在SQLiteOpenHelper的onCreate()中复制文件,那么为时已晚。我建议在此之前进行复制。 这对我有用,谢谢... +1 - Shashank Degloorkar
@CommonsWare:在我的安卓手机上,没有像data/data这样的路径。这可能是“表未找到错误”的原因吗?因为在我的手机上没有data/data,所以无法将我的数据库从资产文件夹复制到data/data/com.myapp/databases。这是问题所在吗? - Ashwin

2
我认为这个错误是在更改表结构时发生的。要解决这个问题,在安装新应用程序之前,请清理数据(设置 -> 管理应用程序 -> 清除数据)。
祝好。

2

1

SQLiteDatabase.execSQL() 方法接受一个以 ";" 结尾的字符串 sql 作为参数。两行代码未被解释。

仅使用几行 SQL 创建表格可能无法执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接