2011-03-22 83 views
1

我正在内存中运行SQLite数据库,并试图使用以下命令删除表。SQLite“Drop table”错误消息:“SQL逻辑错误或缺少数据库”

DROP TABLE 'testing' ; 

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

SQL logic error or missing database 

之前,我跑了“删除表”查询我检查,以确保该表在数据库中存在与此查询。所以我很确定表存在,并且我有一个到数据库的连接。

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

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

我能够创建/更新表没有任何问题。

我的问题:

  • 是否有内存数据库和删除表时SQLite中一个文件数据库之间的差异?
  • 是否有一种方法可以禁用在SQLite中删除表格的功能,我可能会以某种方式重复打开该表格?

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

回答

1

我在V3.7.2中使用Sqlite和xerial jbdc驱动程序时遇到了同样的问题。和JRE7 我首先列出所有与选择命令表如下:

SELECT name FROM sqlite_master WHERE type='table' 

,然后试图删除这样的表:

DROP TABLE IF EXISTS TableName 

我正在存储的文件的数据库上系统,所以它似乎不影响结果。 我使用了IF EXISTS命令来避免首先列出主表中的所有表,但我仍然需要完整的表列表。

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

2

在DROP TABLE命令中不应该有引号。改为:

DROP TABLE testing 
+0

糟糕,实际版本中没有引号。我将它们添加到了问题中,以使事情变得清晰,但我想这只会让事情变得更加复杂。编辑问题并删除引号。 – 2011-03-30 18:58:16

相关问题