5

C++ SQLite3如何知道选择是否返回0行

我有一个 SQLite3 的 select 语句,我怎么知道如果在执行 sql 语句后,结果是 0 rows ,没有找到匹配等。

我如何修改我的代码,以便如果找到 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() 接口。保留两个较旧的接口是为了向后兼容,但不鼓励使用它们。

于 2012-08-14T16:22:29.140 回答
0

先做一个 SQL Count,如果它返回 0,你可以停止执行,而不需要查询 select 语句。

于 2012-08-14T16:12:44.467 回答