4

SQLite を使い始めたばかりで、すべてのアプリケーション データをファイルに書き込みたいのですが、ファイルが既に存在するかどうかはわかりません。「通常の」ファイルではこれは簡単ですが、SQLite ではテーブルが既に存在する場合は作成できず、主キーが既に存在する場合は行を挿入できません。

私は基本的に「CREATE TABLE IF NOT EXISTS table ....else ... DELETE FROM table」のようなことをしたいと思っています。それを行う方法があるに違いありません。他の方法よりも効率的な方法がいくつかあると思います。たとえば、削除して再作成するよりも既存のテーブルを使用する方が良いと思うかもしれませんが、それは、テーブルが存在するかどうかを確認し、その内容を削除することに何が関係しているかによって異なります。

または、データベースをメモリ (sqlite3_open(":memory:",db)) に書き込む方法はありますが、その内容をバイト配列などとして取得してファイルに書き込む方法はありますか?

4

3 に答える 3

8

すべてのデータベースシステムで、ほとんどの場合、最初にテーブルを削除してから再作成する方が効率的です。DELETEを使用すると、インデックスの更新などが必​​要になりますが、単純なDROPでもインデックスが削除され、トランザクションログエントリの作成は必要ありません。SQLiteの場合、DROP IF EXISTSを実行して、テーブルを条件付きで削除できます。

于 2009-12-15T10:55:34.670 に答える
1

空の完全に設計されたデータベースファイルをどこかに用意しておくのはどうでしょうか。次に、目的のアプリデータデータベースが存在しない場合は、空のdbファイルをコピーして作成しますか?

于 2009-12-15T10:55:37.307 に答える
1

ある時点でアプリケーション データを読み込んでから書き戻す場合 (たとえば、ユーザー設定)、データが存在するかどうかがわかります。例外処理でラップされたテーブルへの呼び出しを試すと、それらが存在するかどうかがわかります。代わりに、データベース テーブルを使用して何が存在するかを確認します。

SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;

既存の db ファイルを上書きしたいだけの場合は、ディスクから db ファイルを簡単に削除してから作成コードを実行できます。バージョン間でデータベースが変更される心配はありません。

于 2009-12-15T11:01:09.377 に答える