【问题标题】:SQLite "Drop table" error message: "SQL logic error or missing database"SQLite“删除表”错误消息:“SQL 逻辑错误或缺少数据库”
【发布时间】: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 中删除表的功能,我可能以某种方式强调打开了该表?

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

【问题讨论】:

    标签: sqlite exception drop-table


    【解决方案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 的顺序。

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      相关资源
      最近更新 更多