【发布时间】:2011-07-12 21:07:26
【问题描述】:
是否可以在 Ellipses(...) 中传递不同类型的参数?我正在编写一个函数来进行 SQL 查询,我想通过 Ellipse 向 Insert 语句添加值,并且我的值属于不同类型。
【问题讨论】:
是否可以在 Ellipses(...) 中传递不同类型的参数?我正在编写一个函数来进行 SQL 查询,我想通过 Ellipse 向 Insert 语句添加值,并且我的值属于不同类型。
【问题讨论】:
作为一个警告,不要太聪明。并不是说我因类似的努力而遭受了巨大的痛苦。 :))
Sqlite 已内置查询构建器,请先检查它们。他们不会让你做的是指定一个表名,这可能是你的问题。
boost::format 是一个不错的选择。它是类型安全的,并且不太可能像 C 的可变参数那样对您产生段错误。
std::string statement = boost::str(
boost::format("SELECT tab.* FROM %1% as tab")
% "my_table_name"
);
编辑:
Sqlite 自己处理参数绑定,您不需要任何可变参数。
sqlite3_bind_* functions 提供访问权限。
你可能会使用这样的东西:
const char *sql = "INSERT INTO tab (a,b) VALUES (?1,?2);";
// create statement
sqlite3_bind_int(stmt, 1, 43);
sqlite3_bind_int(stmt, 2, 40000);
这些绑定函数具有您必须检查的返回值,我将把它留给您。
【讨论】:
这是可能的。您需要一些机制来确定参数的数量和类型(例如printf 的格式字符串)。
【讨论】: