在使用VS2017编写数据库客户端
具体设置可参见以下内容
https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-apps-windows-visual-studio.html
http://www.cnblogs.com/flipped/p/6810216.html
遇到一些问题
只要涉及到sql的string操作 就会出现非法内存访问
经过一天排查 发现是关联lib有问题
要注意导入的mysql的lib是32位还是64位 且只能是release版本 比较疑惑的是 那么release如何debug呢? 仅仅靠打印么?
客户端的代码使用例子如下
pstmt = con->prepareStatement("INSERT INTO test(id,name) VALUES (?,?)");
for (int i = 1; i <= 10; i++) {
pstmt->setInt(1, i);
pstmt->setString(2, "test string");
pstmt->executeUpdate();
}
在识别类型上 应该使用pstmt->setInt 或者 pstmt->setString 。。。。还需要小小的封装
添加一个简单类型识别封装代码 这里添加一个简单例子作为示范
1 #include
2 #include
3
4
5 template
6 std::enable_if_t<:is_integral>::value && std::is_same::value, int>
7 bind(T item, size_t I)8 {9 std::cout << "call SetInt(" << I<
13 int bind(const std::string&item, size_t I)14 {15 std::cout << "call SetString(" << I << "," << item << ")" <<:endl return>
19
20 int bind( const char*p, size_t I)21 {22 std::cout << "call SetString(" << I << "," << p << ")" <<:endl return>
26
27 template
28 void bind(Arg&arg) {29 bind(arg, I);30 return;31 }32
33
34 template
35 void bind(Arg&& arg, Args&&... args) {36 bind(arg,I);37 return bind((args)...);38 }39
40
41
42
43 intmain()44 {45 std::string s = "str1";46 bind<1>(1,2,"char*",s,std::string("s2"));47 return 0;48 }
这里的函数通过变参模板 使用两个函数来遍历输入的变参
template
void bind(Arg& arg) {}
template
void bind(Arg&& arg, Args&&... args) {}
依次获取到参数后 使用模板进行类型TRAIT 获取参数类型 从而调用正确的函数setint()或者setstring()
代码运行结果如下
call SetInt(1,1)
call SetInt(2,2)
call SetString(3,char*)
call SetString(4,str1)
call SetString(5,s2)
请按任意键继续. . .