1

我正在内存中运行 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 中删除我可能以某种方式强调打开的表的功能?

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

4

2 回答 2

2

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

DROP TABLE testing
于 2011-03-29T23:00:54.950 回答
1

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

SELECT name FROM sqlite_master WHERE type='table'

然后尝试删除这样的表:

DROP TABLE IF EXISTS TableName

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

对我来说,解决方案只是改变SELECTand的顺序DROP

于 2011-08-30T22:22:48.053 回答