c++ - sql参数的最佳STL容器

标签 c++ sql stl

我必须构建一个动态 sql 查询。要正确执行它,我必须分 3 个步骤完成:

  1. 准备声明
  2. 使用函数绑定(bind)参数:bindString(string value, int index); bindInt(int 值, int 索引);
  3. 执行它

因为这个查询是动态构建的,所以我必须在某个地方存储给定索引的正确值。

例如:

  1. SELECT * FROM Table WHERE A = ? AND E = '?';

  2. SELECT * FROM Table WHERE A = ?和乙=? AND E = '?';

在构建查询期间,我必须将以下内容存储在某处:

第一种情况:

  • 索引 0 用于 int A,
  • 索引 1 用于字符串 E

第二种情况:

  • 索引 0 用于 int A
  • 索引 1 用于 int B
  • 索引 2 用于字符串 E

我最好的想法是创建两个映射:< int, string >, < int, int > 并在创建查询集期间将第一位索引和第二位值创建两个循环,一个用于字符串,第二个对于其中的整数和绑定(bind)参数,它工作正常。

但是我想知道是否可以使用后续索引并以类型安全的方式在一个循环中完成所有操作。

谢谢。

最佳答案

我会考虑创建一个类来包装 SQL 参数。

事实上我会创建一个像这样的抽象类:

SQLParameterBase
{

   std::string toString() = 0;
   void print()
   {
     std::cout << toString();
   }
}

然后是一个模板类:

template<class ParamType>
SQLParameter : public SQLParameterBase
{
private:
    ParamType value;
public:
    std::string toString()
    {
       // You can use std::ostringstream to convert to string,
       // or create another class (derivated from SQLParameterBase) with very specific values
    }
}

你可以这样使用它:

SQLParameterBase * params[10];
maps[0] = new SQLParameter<int>();

希望对你有帮助

关于c++ - sql参数的最佳STL容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25121996/

相关文章:

c++ - std::vector::assign - 重新分配数据?

c++ - 二维数组和坐标

java - 将 JNI 对象作为引用指针访问到 Java 层

联系远程主机的 MySQL 源命令

c++ - 在 C++ 中读取图像数组(使用 opencv)

c++ - std::vector 和 std::min 行为

c++ - 如何将接口(interface)对象转换为特定的继承对象

c++ - 为什么跨线程更改共享变量的代码显然不会受到竞争条件的影响?

sql - 将多个列值插入单个插入值?

MySQL:从包含分隔数据的列创建的输出行