【发布时间】:2013-05-18 15:54:36
【问题描述】:
我听说使用sqlite3_prepare_v2 而不是sqlite_exec 从数据库中获取整数,但我没有找到任何示例。 This 页面也没有帮助。现在我从数据库中获取字符串,所以我需要用atoi 解析它们,这似乎很慢而且效率很低。
SO上有很多类似的问题,但它们是关于obj-c和iOS SDK的。我需要 C/C++ 提示或示例。
提前致谢。
【问题讨论】:
我听说使用sqlite3_prepare_v2 而不是sqlite_exec 从数据库中获取整数,但我没有找到任何示例。 This 页面也没有帮助。现在我从数据库中获取字符串,所以我需要用atoi 解析它们,这似乎很慢而且效率很低。
SO上有很多类似的问题,但它们是关于obj-c和iOS SDK的。我需要 C/C++ 提示或示例。
提前致谢。
【问题讨论】:
sqlite3_column_int(result, columnNum); 将从结果的当前行中返回一列作为 int。
您的准备功能是准备您的查询,它与结果的解释方式无关。 sqlite3 中的所有数据都以文本形式存储,您可以使用适当的函数来检索您认为应该是类型的值。
【讨论】:
sqlite3_prepare成功后,一定不要忘记清理sqlite3_finalize的语句。
要获取结果记录,请调用sqlite3_step,直到它不返回SQLITE_ROW。
要获取当前结果记录的值,请调用sqlite3_column_* functions:
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(db, "SELECT 42", -1, &stmt, NULL) != SQLITE_OK)
...error...
else {
for (;;) {
int rc = sqlite3_step(stmt);
if (rc == SQLITE_DONE)
break;
if (rc != SQLITE_ROW) {
...error...
break;
}
printf("value: %d\n", sqlite3_column_int(stmt, 0));
}
sqlite3_finalize(stmt);
}
【讨论】: