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

Posted

技术标签:

【中文标题】SQLite“删除表”错误消息:“SQL 逻辑错误或缺少数据库”【英文标题】:SQLite "Drop table" error message: "SQL logic error or missing database" 【发布时间】:2011-03-22 16:58:50 【问题描述】:

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

DROP TABLE 'testing' ;

但是当我执行 SQL 语句时,我得到了这个错误

SQL logic error or missing database

在运行“删除表”查询之前,我会检查以确保该表存在于使用此查询的数据库中。所以我很确定该表存在并且我与数据库建立了连接。

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

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

我能够毫无问题地创建/更新表。

我的问题:

SQLite 中删除表时内存数据库和文件数据库有区别吗? 有没有办法禁用在 SQLite 中删除表的功能,我可能以某种方式强调打开了该表?

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

【问题讨论】:

【参考方案1】:

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

DROP TABLE testing

【讨论】:

糟糕,真实版本中没有引号。我将它们添加到问题中以使事情变得清晰,但我想这只会使事情变得更加复杂。编辑了问题并删除了引号。【参考方案2】:

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

SELECT name FROM sqlite_master WHERE type='table'

然后尝试像这样删除一个表:

DROP TABLE IF EXISTS TableName

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

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

【讨论】:

以上是关于SQLite“删除表”错误消息:“SQL 逻辑错误或缺少数据库”的主要内容,如果未能解决你的问题,请参考以下文章

在 Sqlite 中创建表之前是不是必须删除表?

Python sqlite3 参数化删除表

尝试将 python 字典列表转换为 SQLite 表时,我不断收到错误消息?

sqlite方法-2.0

SQLite Expert表分离和解决SQLite Expert删除表后大小不变的问题

SQLite 判断表存在/删除表/创建表及if not exist插入数据