閱讀完文檔後,似乎函數sqlite3_column_count完全相同,但沒有sqlite3_data_count具有的限制。SQLite C API中使用sqlite3_data_count()比sqlite3_column_count()有什麼好處?
爲什麼我會想要使用sqlite3_data_count而不是sqlite3_column_count?謝謝!
閱讀完文檔後,似乎函數sqlite3_column_count完全相同,但沒有sqlite3_data_count具有的限制。SQLite C API中使用sqlite3_data_count()比sqlite3_column_count()有什麼好處?
爲什麼我會想要使用sqlite3_data_count而不是sqlite3_column_count?謝謝!
sqlite3_data_count
返回當前正在執行的語句的值(列)數。 沒有結果它返回0.
sqlite3_column_count
另一方面,返回總是列數,有無結果。
您將使用哪一個取決於您是否必須獲取列數。
我擡頭的兩個函數來源:
/*
** 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."這甚至不是正確的英文,函數定義隨附的評論好得多。
有時我們必須檢查來源:) +1檢查出來。我同意這部分文檔不夠清楚。 – 2010-02-09 11:26:21
對不起,這是有點偏離主題,但它是相關的。我覺得對於任何給定的預處理語句,其結果列計數將始終保持不變(即使使用'prepare_v2'來使語句的SQL文本內容始終保持不變)。所以我希望在最初準備語句之後一次調用'sqlite3_column_count'就足夠了? (而不是每次調用'sqlite3_step'後調用它,例如我看到很多示例代碼) – 2016-01-16 00:20:15
我還是很困惑。你的意思是sqlite3_data_count實際上返回結果集中的行數,而不是列? – 2010-02-09 11:01:10