mysql mariadb的VC客户端遇到的问题
Posted itdef
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
请按任意键继续. . .
以上是关于mysql mariadb的VC客户端遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章