2016-06-15 4 views
0

Sql文がSELECTかどうかを区別するために私のコードが必要です。vC++(sqlite)distingush文の使い方はSELECTかNOTですか?

結果が1より大きい場合、選択を区別することは容易です。 しかし、文が実行されたときの結果はありません。どのように区別しますか?

sqlite_stmt *some_stmt; 
//case 1 : (the table has no row) 
    sqlite3_prepare("select * from some_table", &some_stmt); 
//case 2 : 
    sqlite3_prepare("create table some_table2", &some_stmt); 
    int result = sqlite3_step(some_stmt); 

結果は同じです:

SQLITE_DONE; 

私は2つの方法でそれを区別することができ、 第一文から部分文字列を取得することです。しかし、私はそれをしたくない、それは間違っているようだ。 2番目はsqlite3_column_count()です。通常、column_countは、文がSELECTの場合より1つ以上です。

sqlite3_coulmn_count()を使用して正しい方法ですか?何もないsqliteやその他の列のテーブルですか?

ステートメントがSELECTかどうかを区別する正しい方法が必要です。

答えて

1

「SELECT」を検索することができないように、データ(例:PRAGMA)を返す他のステートメントがあります。 documentedとして

sqlite3_column_count()は正しい方法です:

このルーチンは0てpstmtは、(例えば、UPDATEのための)データを返さないSQL文の場合。

SQLでは、列のない表はありません。実際にデータを参照していない構造体(たとえばEXISTS (SELECT ...)など)でも、ダミー列を使用する必要があります。

+0

ありがとうございます!私は、no-column_tableがないと確信したい。私は心配することなく私のプロジェクトを行うことができます:) –

関連する問題