2010-02-09 59 views

回答

4

sqlite3_data_count返回當前正在執行的語句的值(列)數。 沒有結果它返回0.

sqlite3_column_count另一方面,返回總是列數,有無結果。

您將使用哪一個取決於您是否必須獲取列數。

+0

我還是很困惑。你的意思是sqlite3_data_count實際上返回結果集中的行數,而不是列? – 2010-02-09 11:01:10

12

我擡頭的兩個函數來源:

/* 
** Return the number of columns in the result set for the statement pStmt. 
*/ 
SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){ 
    Vdbe *pVm = (Vdbe *)pStmt; 
    return pVm ? pVm->nResColumn : 0; 
} 

/* 
** Return the number of values available from the current row of the 
** currently executing statement pStmt. 
*/ 
SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){ 
    Vdbe *pVm = (Vdbe *)pStmt; 
    if(pVm==0 || pVm->pResultSet==0) return 0; 
    return pVm->nResColumn; 
} 

現在很明顯的區別是什麼,所以NickD是正確的。

順便說一句,文檔是可怕的:"The sqlite3_data_count(P) the number of columns in the of the result set of prepared statement P."這甚至不是正確的英文,函數定義隨附的評論好得多。

+0

有時我們必須檢查來源:) +1檢查出來。我同意這部分文檔不夠清楚。 – 2010-02-09 11:26:21

+0

對不起,這是有點偏離主題,但它是相關的。我覺得對於任何給定的預處理語句,其結果列計數將始終保持不變(即使使用'prepare_v2'來使語句的SQL文本內容始終保持不變)。所以我希望在最初準備語句之後一次調用'sqlite3_column_count'就足夠了? (而不是每次調用'sqlite3_step'後調用它,例如我看到很多示例代碼) – 2016-01-16 00:20:15

相關問題