C ++ SQLite3如何知道select是否返回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 ++;
}
答案 0 :(得分:4)
sqlite3_step
会返回SQLITE_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
}
您可以找到complete list of result codes in the manual。
最后,在使用SQLite3时应使用“v2”界面。 From the manual:
建议所有新程序使用sqlite3_prepare_v2()和sqlite3_prepare16_v2()接口。保留两个较旧的接口是为了向后兼容,但不鼓励使用它们。
答案 1 :(得分:0)
首先执行SQL Count,如果返回0,则可以停止执行而无需查询select语句。