sqlite - SQLite“Drop table”错误消息:“SQL逻辑错误或数据库丢失”

标签 sqlite exception drop-table

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

DROP TABLE 'testing' ;


但是当我执行SQL语句时,出现此错误

SQL logic error or missing database


在运行“ Drop Table”查询之前,请检查以确保该查询表存在于数据库中。因此,我非常确定该表存在并且与数据库建立了连接。

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


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

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

我的问题:


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


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

最佳答案

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

SELECT name FROM sqlite_master WHERE type='table'


然后尝试删除这样的表:

DROP TABLE IF EXISTS TableName


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

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

关于sqlite - SQLite“Drop table”错误消息:“SQL逻辑错误或数据库丢失”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5394969/

相关文章:

安卓:SQLiteOpenHelper.getDatabaseLocked

mysql - 有很多列的表还是很多小表?

Laravel:当有人访问后路由而不提供后参数时,如何防止 RouteCollection.php 中的 MethodNotAllowedHttpException?

c# - 在 C# 中捕获错误时退出程序?

Teradata DELETE ALL 与 DROP+CREATE

database - 如果表存在于 sql 语句中,则从 oracle 数据库中删除表

android - cursor.moveToNext() 抛出 CursorWindowAllocationException

android - 如何获取数据库模式的版本?

java - 新的 Google App Engine 数据存储 API 似乎没有抛出那么多异常?

database - 退出函数时删除临时表