mysql客户端 mariadb_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

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)

请按任意键继续. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值