2012-08-14 59 views
3

C++的SQLite3如何知道是否選擇返回0行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 ++; 
} 
+2

只需檢查'sqlite3_step'的返回碼...和RTFM。 – 2012-08-14 16:09:36

+0

我在找什麼返回代碼?我知道101成功執行 – 2012-08-14 16:13:02

+0

你指的是「SQLITE_EMPTY」 – 2012-08-14 16:13:46

回答

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()接口。爲保持向後兼容,保留了兩個較舊的接口,但不鼓勵使用它們。

+0

我只想檢查SQLite是否發現任何行,如果沒有行,返回布爾值success = false else success = true – 2012-08-14 16:30:51

+0

@baokychen:你讀過答案了嗎?我寫的第一句話正是你需要的。 – netcoder 2012-08-14 16:36:06

+0

謝謝。是工作。 – 2012-08-14 17:24:43

0

做一個SQL計數第一,如果返回0,你可以只是停止執行,而不需要查詢的select語句。

+0

如何執行SQL計數並檢查其返回值是否爲0 – 2012-08-14 16:14:40

+0

查詢的結果應該將int作爲結果。那個int將會是count。如果(結果[0]> 0){//繼續} – Walls 2012-08-14 16:18:54