1

メモリ内で 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 でテーブルをドロップする機能を無効にする方法はありますか?

編集:ロックされたテーブルと関係があるようです。まだまだ調査中。

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最初にマスター テーブルのすべてのテーブルを一覧表示することを避けるためにコマンドを使用しましたが、いずれにしても完全なテーブル リストが必要でした。

私にとっての解決策は、SELECTとの順序を変更することだけでしたDROP

于 2011-08-30T22:22:48.053 に答える