【问题标题】:parameters to Ellipses in C++C++中椭圆的参数
【发布时间】:2011-07-12 21:07:26
【问题描述】:

是否可以在 Ellipses(...) 中传递不同类型的参数?我正在编写一个函数来进行 SQL 查询,我想通过 Ellipse 向 Insert 语句添加值,并且我的值属于不同类型。

【问题讨论】:

    标签: c++ sql sqlite


    【解决方案1】:

    作为一个警告,不要太聪明。并不是说我因类似的努力而遭受了巨大的痛苦。 :))

    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);
    

    这些绑定函数具有您必须检查的返回值,我将把它留给您。

    【讨论】:

    • 感谢您的建议。我的问题是为 SQL 表列指定值,而我只有一个表,所以我没有问题。具体来说,我正在寻找可以帮助我完成以下任务的东西:插入值(value1,value2,value3);如何编写一个函数来获取任意数量和任意类型的值?
    • @ddama 用未经测试的示例更新了答案,请查看完整文档以了解警告。
    • @ddama:我创建了一个记录和字段系统,可以生成用于插入的 SQL 语句。记录是指向 Field 基类的指针向量。创建 SQL INSERT 语句是对向量进行迭代,询问每个字段的名称。这种技术将允许您在表中拥有不同的值类型。
    【解决方案2】:

    这是可能的。您需要一些机制来确定参数的数量和类型(例如printf 的格式字符串)。

    【讨论】:

      猜你喜欢
      • 2020-08-11
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      相关资源
      最近更新 更多