SQLite“删除表”错误消息:“SQL逻辑错误或缺少数据库”

时间:2011-03-22 16:58:51

标签: sqlite exception drop-table

我正在内存中运行SQLite数据库,我正在尝试使用以下命令删除表。

DROP TABLE 'testing' ;

但是当我执行SQL语句时,我收到此错误

SQL logic error or missing database

在运行“Drop Table”查询之前,我检查以确保该表存在于具有此查询的数据库中。所以我很确定该表存在,并且我与数据库有连接。

SELECT count(*) FROM sqlite_master WHERE type='table' and name='testing';

此数据库从文件数据库加载到内存中,在我尝试删除此表后,数据库将从内存保存到文件系统。然后,我可以使用第三方SQLite实用程序来查看SQLite文件,并检查“测试”是否存在,确实存在。使用相同的第三方SQLite实用程序,我能够运行“Drop TABLE”SQL语句,但没有错误。

我可以毫无问题地创建/更新表格。

我的问题:

  • 删除表时,SQLite中的内存数据库和文件数据库之间是否存在差异?
  • 有没有办法禁用在SQLite中删除表格的能力,我可能会以某种方式突然开启?

编辑:它似乎与锁定的表格有关。还在调查。

2 个答案:

答案 0 :(得分:2)

您的DROP TABLE命令中不应该有引号。请改用:

DROP TABLE testing

答案 1 :(得分:1)

在版本3.7.2中使用带有xerial jbdc驱动程序的Sqlite时遇到了同样的问题。和JRE7 我首先使用select命令列出所有表,如下所示:

SELECT name FROM sqlite_master WHERE type='table'

然后尝试删除这样的表:

DROP TABLE IF EXISTS TableName

我正在处理存储在文件系统上的数据库,因此似乎不会影响结果。 我使用IF EXISTS命令来避免首先列出主表中的所有表,但我还是需要完整的表列表。

对我来说,解决方案只是更改SELECTDROP的顺序。