我必须构建一个动态 sql 查询。要正确执行它,我必须分 3 个步骤完成:
- 准备声明
- 使用函数绑定(bind)参数:bindString(string value, int index); bindInt(int 值, int 索引);
- 执行它
因为这个查询是动态构建的,所以我必须在某个地方存储给定索引的正确值。
例如:
SELECT * FROM Table WHERE A = ? AND E = '?';
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/