mysql mariadb的VC客户端遇到的问题

在使用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 <string>
 2 #include <iostream>
 3 
 4 
 5 template<typename T>
 6 std::enable_if_t<std::is_integral<T>::value && std::is_same<T, int>::value, int>
 7 bind(T item, size_t I)
 8 {
 9     std::cout << "call SetInt(" << I<<","<< item <<")" << std::endl;
10     return 1;
11 }
12 
13 int bind(const std::string& item, size_t I)
14 {
15     std::cout << "call SetString(" << I << "," << item << ")" << std::endl;
16     return 1;
17 }
18 
19 
20 int bind( const char* p, size_t I)
21 {
22     std::cout << "call SetString(" << I << "," << p << ")" << std::endl;
23     return 1;
24 }
25 
26 
27 template<size_t I, typename Arg, typename... Args>
28 void bind(Arg& arg) {
29     bind(arg, I);
30     return;
31 }
32 
33 
34 template<size_t I, typename Arg, typename... Args>
35 void bind(Arg&& arg, Args&&... args) {
36     bind(arg,I);
37     return bind<I + 1>((args)...);
38 }
39 
40 
41 
42 
43 int main()
44 {
45     std::string s = "str1";
46     bind<1>(1,2,"char*",s,std::string("s2"));
47     return 0;
48 }

 这里的函数通过变参模板 使用两个函数来遍历输入的变参

template<size_t I, typename Arg, typename... Args>
void bind(Arg& arg) {}

template<size_t I, typename Arg, typename... Args>
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)
请按任意键继续. . .

作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
阿里打赏 微信打赏
原文地址:https://www.cnblogs.com/itdef/p/7697746.html