在使用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 。。。。还需要小小的封装

添加一个简单类型识别封装代码 这里添加一个简单例子作为示范

 #include <string>
#include <iostream> template<typename T>
std::enable_if_t<std::is_integral<T>::value && std::is_same<T, int>::value, int>
bind(T item, size_t I)
{
std::cout << "call SetInt(" << I<<","<< item <<")" << std::endl;
return ;
} int bind(const std::string& item, size_t I)
{
std::cout << "call SetString(" << I << "," << item << ")" << std::endl;
return ;
} int bind( const char* p, size_t I)
{
std::cout << "call SetString(" << I << "," << p << ")" << std::endl;
return ;
} template<size_t I, typename Arg, typename... Args>
void bind(Arg& arg) {
bind(arg, I);
return;
} template<size_t I, typename Arg, typename... Args>
void bind(Arg&& arg, Args&&... args) {
bind(arg,I);
return bind<I + >((args)...);
} int main()
{
std::string s = "str1";
bind<>(,,"char*",s,std::string("s2"));
return ;
}

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

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客户端遇到的问题的更多相关文章

  1. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  2. 15 个有用的 MySQL/MariaDB 性能调整和优化技巧(转载的一篇好文)

    MySQL 是一个强大的开源关系数据库管理系统(简称 RDBMS).它发布于 1995 年(20年前).它采用结构化查询语言(SQL),这可能是数据库内容管理中最流行的选择.最新的 MySQL 版本是 ...

  3. 在CentOS 7 MySQL / MariaDB

    在CentOS7中,MariaDB  替代了MySQL;更多复杂的疑问可以在这里查看 MariaDB versus MySQL – Compatibility Install MySQL / Mari ...

  4. MySQL/MariaDB的锁

    本文目录: 1.MariaDB/MySQL事务提交的方式 2.MariaDB/MySQL中的锁简介 2.1 不同存储引擎支持的锁级别 2.2 锁类型 2.3 锁兼容性 3.MyISAM的表级锁(loc ...

  5. 远程连接MySQL(MariaDB)数据库

    网络环境: MySQL(MariaDB)服务器的操作系统为 CentOS 7 MySQL(MariaDB)服务器IP:172.16.230.15 客户端操作系统为 Windows 2008 R2 客户 ...

  6. 关于数据库管理系统DBMS--关系型数据库(MySQL/MariaDB)

    数据库的结构(3种):层次,网状,关系型(用的最多): DBMS的三层模型: 视图层:面向最终用户: 逻辑层:面向程序员或DBA: 物理层:面向系统管理员: 关系型数据库管理系统——RDBMS: 主要 ...

  7. 记录CentOS 7.4 上安装MySQL&MariaDB&Redis&Mongodb

    记录CentOS 7.4 上安装MySQL&MariaDB&Redis&Mongodb 前段时间我个人Google服务器意外不能用,并且我犯了一件很低级的错误,直接在gcp讲服 ...

  8. 详细介绍MySQL/MariaDB的锁

    官方手册:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html 1.事务提交的方式 在MariaD ...

  9. [译]在Linux上的提高MySQL/MariaDB安全性的12条建议

    MySQL 是世界上最流行的开源数据库系统,而MariaDB(MySQL的一个分支)是世界上发展最快的开源数据库系统.安装MySQL服务器之后,它的默认配置是不安全的,保护它是一般数据库管理中的基本任 ...

随机推荐

  1. python网络编程之互斥锁

    标签(空格分隔): 互斥锁 进程之间的数据不共享,但是共享同一套文件系统,所以访问同一个文件,或者同一个打印终端,是没有问题的,而共享带来的问题就是竞争,竞争带来的结果就是错乱,如下: #并发运行,效 ...

  2. 第二章 向量(d5)有序向量:插值查找

  3. LightOJ - 1030 期望+dp

    题目链接:https://vjudge.net/problem/25907/origin 一个山洞,里面有有1到n个位置,每个位置都有一定的金币,你有一个六面的骰子,一开始你在1,每次摇到了哪个数就往 ...

  4. PAT1018 (dijkstra+dfs)

    There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...

  5. TZOJ 3295 括号序列(区间DP)

    描述 给定一串字符串,只由 “[”.“]” .“(”.“)”四个字符构成.现在让你尽量少的添加括号,得到一个规则的序列. 例如:“()”.“[]”.“(())”.“([])”.“()[]”.“()[( ...

  6. webpack 安装,打包使用

      Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换. 全局安装webpack 打开文件夹amd输入指令  npm i webpa ...

  7. Django的rest_framework的序列化组件之序列化多表字段的方法

    首先,因为我们安装了restframework,所以我们需要在django的settings中引入restframework INSTALLED_APPS = [ 'django.contrib.ad ...

  8. Python中操作SQLAlchemy

    一.ORM 框架简介 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法 ...

  9. iOS 开发实用工具

    史蒂芬的博客 (各种软件) http://www.sdifen.com/ 产品原型设计工具 -- 1.墨刀 2.Axure RP 检测接口工具 ---- 1.Charles 2. postman607 ...

  10. [leetcode]270. Closest Binary Search Tree Value二叉搜索树中找target的最接近值

    Given a non-empty binary search tree and a target value, find the value in the BST that is closest t ...