5

C++ SQLite3 選択が 0 行を返すかどうかを知る方法

SQLite3 の select ステートメントがあります。SQL ステートメントを実行した後、結果が 0 行 、一致するものが見つからないなどの場合、どうすればわかりますか..

0 行が見つかった場合、結果をベクターに入れる部分を実行しないようにコードを変更するにはどうすればよいですか。

以下の私のコード:

sqlstatement = "SELECT * from abe_account where department="+quotesql(department)+" AND name="+quotesql(name)+";";


    std::vector< std::vector < std:: string > > result;
    for( int i = 0; i < 4; i++ )
    result.push_back(std::vector< std::string >());


    sqlite3_prepare( db, sqlstatement.c_str() , -1, &stmt2, NULL );//preparing the statement
    sqlite3_step( stmt2 );//executing the statement

    while( sqlite3_column_text( stmt2, 0 ) )
{
    for( int i = 0; i < 4; i++ )
    result[i].push_back( std::string( (char *)sqlite3_column_text( stmt2, i ) ) );
    sqlite3_step( stmt2 );
    counter ++;
}
4

2 に答える 2

5

sqlite3_stepSQLITE_DONE処理する行が (それ以上) ない場合に戻ります。

int stat = sqlite3_step(stmt2);
if (stat == SQLITE_DONE) {
    // no rows to process
}

エラーも忘れずにチェックしてください。

if (stat != SQLITE_DONE && stat != SQLITE_ROW) {
    // there's probably a problem
}

結果コードの完全なリストはマニュアルにあります。

最後に、SQLite3 を使用する場合は「v2」インターフェイスを使用する必要があります。マニュアルから

sqlite3_prepare_v2() および sqlite3_prepare16_v2() インターフェイスは、すべての新しいプログラムに推奨されます。2 つの古いインターフェイスは下位互換性のために残されていますが、使用はお勧めできません。

于 2012-08-14T16:22:29.140 に答える
0

最初に SQL カウントを実行します。0 が返された場合は、select ステートメントを照会する必要なく実行を停止できます。

于 2012-08-14T16:12:44.467 に答える