在SQLite C API中使用sqlite3_data_count()而不是sqlite3_column_count()有什么好处?

在SQLite C API中使用sqlite3_data_count()而不是sqlite3_column_count()有什么好处?,c,api,sqlite,C,Api,Sqlite,在读取文档之后,函数sqlite3\u column\u count的作用似乎完全相同,但没有sqlite3\u data\u count的限制 为什么我要在sqlite3列上使用sqlite3数据计数?谢谢 sqlite3\u data\u count返回当前执行语句的值(列)数。 没有结果,它返回0 sqlite3\u column\u count另一方面,总是返回列数,无论是否有结果 您将使用哪一个取决于您是否必须获得列数。我已经查找了两个函数的来源: /* ** Return the n

在读取文档之后,函数sqlite3\u column\u count的作用似乎完全相同,但没有sqlite3\u data\u count的限制


为什么我要在sqlite3列上使用sqlite3数据计数?谢谢

sqlite3\u data\u count
返回当前执行语句的值(列)数。 没有结果,它返回0

sqlite3\u column\u 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是对的


顺便说一句,文档很糟糕:这甚至不是正确的英语,函数定义附带的注释要好得多。

我仍然感到困惑。您的意思是sqlite3_data_count实际上返回结果集中的总行数,而不是列数吗?有时我们必须检查源代码:)+1才能将其签出。我同意文档的这一部分不够清晰。抱歉,这有点离题,但它是相关的。我觉得对于任何给定的prepared语句,其结果列计数将始终保持不变(即使使用
prepare\u v2
语句的SQL文本内容始终保持不变)。所以我希望在语句最初准备好之后,调用
sqlite3\u column\u count一次就足够了?(与每次调用
sqlite3\u步骤
后调用它相反,我看到很多示例代码都是这样做的)