2012-03-19 4 views
2

SQLiteが存在するかどうか毎回チェックすることなく、SQLiteでテーブルを作成します。CREATE TABLEが実際にテーブルを作成するかどうか、またはすでに存在しているかどうかを確認します。

sqlite3_stmt* create_stmt = NULL; 
if (sqlite3_prepare_v2(db, "CREATE TABLE mytable (sif INTEGER PRIMARY KEY, name VARCHAR, description VARCHAR);", -1, &create_stmt, NULL) == SQLITE_OK) 
{ 
    sqlite3_step(create_stmt); 
    sqlite3_finalize(create_stmt); 
} 

テーブルが存在しない場合は作成されます。存在する場合、何も起こりません。

テーブルが作成されたかどうかを確認する方法があるかどうかを知りたいですか?

答えて

2

MySQLのdescribe table sqlite3の中に相当があります。詳細については、this questionを参照してください。

.schema mytableを発行して、作成済みかどうかを知ることができます。単一のテーブルのことができますalso useこの文でより集中的であるためには:表がすでに非ゼロ、その後sqlite3_finalizeリターンが存在する場合、あなたはまだ(ない答えを探していますがされている場合

select count(type) from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK'; 
+0

OK、それはテーブルが存在するかどうかを確認する方法でしたが、質問は異なります。彼らが何をするかに基づいてsqliteステートメントから返された値を取得します。おそらくそれは可能ではありません(示されている場合)。 –

+0

@ user973238データベースをフォローしたい場合は、従いたいアクションの専用ログテーブルを使用して、それをいくつかのトリガーに関連付けることができます – Coren

+0

Hm、私はまだそのようなアクションのためには短すぎます、まだ初心者です。とにかく、助けてくれてありがとう、 "select count(type)"が優れています! –

1

テーブルがすでに存在する場合は、sqlite3_step()が失敗し、sqlite3_prepare_v2は失敗します。その結果もチェックしてください。
編集:;:.schema TABLENAMEあなたが破損しているデータベースや他のエラー状態をキャッチするために、とにかくそれをすべての時間をチェックする必要がありますほか)

+0

私のsqlite3_step()は決して失敗しません。テーブルが存在するかどうかに関わらず101を返します。 –

+1

101は 'SQLITE_DONE'です。 [結果コード](http://www.sqlite.org/c3ref/c_abort.html)を参照してください。 '' sqlite3_step'文書によると、 "v2"インタフェースでは、他の結果コードや拡張結果コードも返されるかもしれません。 [SQLステートメントの評価](http://www.sqlite.org/c3ref/step.html)を参照してください。 – jww

3

私はわかりませんSQLITE_OK)の値。

関連する問題