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
命令避免首先列出主表中的所有表,但无论如何我需要完整的表列表。
对我来说,解决方案只是更改SELECT
和DROP
的顺序。
【讨论】:
以上是关于SQLite“删除表”错误消息:“SQL 逻辑错误或缺少数据库”的主要内容,如果未能解决你的问题,请参考以下文章
尝试将 python 字典列表转换为 SQLite 表时,我不断收到错误消息?