7

これは簡単な質問だと思いますが、FMDB git ページで答えが見つかりませんでした。コマンドを使用する場合:

[database executeUpdate:@"create table T_table(name text primary key, age int)"];

FMDB または SQLite は、テーブルが既に存在するかどうかを確認するために何らかの検証を行いますか?

複数のテーブルを作成せずに、クラス初期化子でこのメソッドを呼び出すことはできますか?

ばかげた質問ならごめんなさい。

4

3 に答える 3

15

別の解決策は、クエリを次のように変更することです。

create table if not exists test_table (test_no NUMBER, test_name TEXT);

または、次の方法で存在を確認できます。

select sql from SQLITE_MASTER where name = 'test_table'

そして、結果が返されるかどうかを確認します。

于 2012-11-06T21:35:59.007 に答える
0

コマンドを FMDB に渡すCREATE TABLEと、内部的に対応する SQLite クエリに変換されます (心配する必要はありません)。

SQLite の Web サイトにある公式ドキュメントによると、次のように記載されています。

"It is usually an error to attempt to create a new table in a database that already contains a table, index or view of the same name."

したがって、同じ名前で別のテーブルを作成しようとすると、SQLite は次のようなエラーをスローします。

create table test_table (test_no NUMBER, test_name TEXT); //Table created

/* Now, try creating the table again */
create table test_table (test_no NUMBER, test_name TEXT); 

次のエラーが表示されます。
エラー: テーブル test_table は既に存在します

そのため、SQLite はテーブルの存在をチェックし、同じ名前の別のテーブルを許可しません。

詳細については、ドキュメントを参照してください。

ソース http://www.sqlite.org/lang_createtable.html

于 2012-11-06T06:18:53.890 に答える