编译和使用 MySQL C++ Connector
记录编译 mysql C and C++ connector 和简单访问数据库.
环境: vs2012, mysql 5.6.13, 基于x64
0. 软件包
mysql http://dev.mysql.com/downloads/mysql/
c connector http://dev.mysql.com/downloads/connector/c/
c++ connector依赖C connector, mysql的binary里面有编译好的C connector lib, 如果你用的编译器和mysql 一样, 那么不用重新编译
c++ connector http://dev.mysql.com/downloads/connector/cpp/
boost http://sourceforge.net/projects/boost/files/boost/1.54.0/
c++ Connector 依赖boost. 本来还尝试过vs2013, 但是boost1.54在vs2013 preview下编译有问题, 我没有试低版本的boost.
cmake http://www.cmake.org/cmake/resources/software.html
mysql的project是基于cmake. cmake可以生成vc project, 使用起来挺方便
1. 环境bat vs2012x64env.bat
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64
set PATH=%PATH%;D:\mybin\cmake-2.8.11.1-win32-x86\bin
set MYSQL_DIR=D:\mybin\mysql-5.6.13-winx64
set BOOST_ROOT=D:\mybin\boost_1_54_0
cmd /K
2. Generate vc project
C connector
cmake -G "Visual Studio 11 Win64"
build project libmysql, 只需要一个lib, 不用编译所有, debug模式下, 自带trace
C++ connector
如果想要打开trace, 加-DMYSQLCPPCONN_TRACE_ENABLE:BOOL=1, 实际还没有结束, 大概是cmake生成project的错误, 需要手动添加预定义宏 CPPCONN_TRACE_ENABLED
cmake -DMYSQLCPPCONN_TRACE_ENABLE:BOOL=1 -G "Visual Studio 11 Win64"
build project mysqlcppconn
把头文件copy在mysql下, 方便些, 不是必须
copy D:\mybin\mysql-connector-c++-1.1.3\cppconn D:\mybin\mysql-5.6.13-winx64\include\cppconn
3.Demo, 贴代码了
#include <iostream>
#include <memory>
#include <string>
#include <cppconn\driver.h>
#include <cppconn\exception.h>
#include <cppconn\resultset.h>
#include <cppconn\statement.h>
#include <cppconn\prepared_statement.h>
static const char* g_sqltrance = "";//"d:t:O,client.trace";
static const int g_enable_debug_trace = 0;
int main()
try
{
std::cout << "connect db start ... \n";
auto driver = get_driver_instance();
std::unique_ptr<sql::Connection> con(driver->connect("tcp://127.0.0.1:3306", "root", ""));
con->setClientOption("libmysql_debug", g_sqltrance);
con->setClientOption("clientTrace", &g_enable_debug_trace);
con->setSchema("test");
// create table
std::unique_ptr<sql::Statement> stmt(con->createStatement());
stmt->execute("drop table if exists test");
stmt->execute("create table test(id int, label char(1))");
// insert
stmt->execute("insert into test(id, label) values (1, 'a')");
stmt->execute("insert into test(id, label) values (2, 'b')");
stmt->execute("insert into test(id, label) values (3, 'c')");
// update
stmt->executeUpdate("update test set label='e' where id=2");
// prepared statement
std::unique_ptr<sql::PreparedStatement> prep_stmt(con->prepareStatement("insert into test(id, label) values(?, ?)"));
size_t n = 5;
while (n++ < 30)
{
prep_stmt->setInt(1, n);
prep_stmt->setString(2, sql::SQLString(std::string(1, 'A' + n)));
prep_stmt->execute();
}
// query
std::unique_ptr<sql::ResultSet> res(stmt->executeQuery("select id, label from test order by id asc"));
while (res->next())
{
std::cout << "id = " << res->getInt(1) << " label = " << res->getString("label") << "\n";
}
return 0;
}
catch (sql::SQLException & e)
{
std::cout << "SQLException : \n "
<< e.what()
<< "\n ErrorCode " << e.getErrorCode() << " "
<< "\n SQLState " << e.getSQLState() << "\n";
}
catch (...)
{
std::cout << "uncatch exception\n";
}
4. 如果想导入sample数据库
http://dev.mysql.com/doc/index-other.htmldownload world database InnoDB version
mysql -u root
create database world;
use world;
source c:\world_innodb.sqlshow tables;
编译和使用 MySQL C++ Connector的更多相关文章
- Linux下MySQL c++ connector示例
最近在学习数据库的内容,起先是在windows下用mysql c++ connector进行编程,之所以选用c++而不是c的api,主要是考虑到c++ connector是按照JDBC的api进行实现 ...
- 转载:Centos7 从零编译Nginx+PHP+MySql 二
序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...
- 转载:Centos7 从零编译Nginx+PHP+MySql 序言 一
这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先的一些 ...
- [原创]Centos7 从零编译Nginx+PHP+MySql
序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...
- CentOS下PHP7的编译安装,MySQL的支持和一些问题的解决
最近试了一下PHP7,在编译和支持MySQL上都遇到一些问题,相信不少同学也同样遇到,所以在这里聊一下这个过程.简单来讲编译PHP7只需要3步: 1../buildconf --force 2../c ...
- mysql ODBC connector相关问题
mysql ODBC connector我安装了,怎么就不成功了 进到命令行,运行下边的:C:\>cd \windows\SysWOW64 C:\Windows\SysWOW64>odbc ...
- CentOS 6.0最小化编译安装Nginx+MySQL+PHP+Zend
http://www.osyunwei.com/archives/235.html 引言: 操作系统:CentOS 6.0 32位 下载地址:http://mirrors.163.co ...
- CentOS6.6 32位 Minimal版本纯编译安装Nginx Mysql PHP Memcached
声明:部分编译指令在博客编辑器里好像被处理了,如双横线变成单横线了等等,于是在本地生成了一个pdf版本,在下面地址可以下载. LNMP+Memcached CentOS是红帽发行的免费的稳定Linux ...
- windows下编译qt的mysql驱动
windows下编译qt的mysql驱动cd %QTDIR%\src\plugins\sqldrivers\mysqlqmake –o Makefile INCLUDEPATH+="C:\M ...
随机推荐
- 阿里云无法远程连接数据库MySQL错误码10060解决办法
使用图形界面管理工具Navicat for MySQL连接Mysql数据库时提示错误:Can't connect to MySQL server (10060) 导致些问题可能有以下几个原因: 1.网 ...
- loj#2718. 「NOI2018」归程
题目链接 loj#2718. 「NOI2018」归程 题解 按照高度做克鲁斯卡尔重构树 那么对于询问倍增找到当前点能到达的高度最小可行点,该点的子树就是能到达的联通快,维护子树中到1节点的最短距离 s ...
- [UOJ#245][UER#7]天路(近似算法)
允许5%的相对误差,意味着我们可以只输出$\log_{1.05} V$种取值并保证答案合法.并且注意到答案随着区间长度而单增,故取值不同的答案区间是$O(\log_{1.05} V)$的. 于是初始x ...
- 【Python3】【贪心】hdu4296 Buildings
题意: n个板,每个板有重量和强度w和s,还有PDV值(上面的总重量-该板的强度) 对于某种叠放方式,PDV的最大值为其代表值 求该值的最小值 考虑只有两个板的情况:a和b,很显然下面的比上面的容 ...
- 课堂练习—hash
课堂练习-hash 要求: 利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75) 关键字集合:85,75,57,60,6 ...
- VC被控制时关闭极域电子教室、破解联想硬盘保护系统密码(上)
<[原]关于VC运行时关闭极域电子教室的改进方法> 本文将讲资料和方法,具体实现和破解联想硬盘保护系统密码在(下)中,有关破解联想硬盘保护系统(删除它)的方法很简单,用硬盘保护卡克星就可以 ...
- 关于JBoss日志中的报错Exception in thread "AWT-EventQueue-0"的解决记录
一.前情提要 操作系统:Windows Server 2008 R2,JDK版本:1.6.0_45,应用容器:JBoss 4.2.3 GA.所部署的应用均为Web型项目,没有任何图形相关的项目. 二. ...
- URAL 1877 Bicycle Codes
1877. Bicycle Codes Time limit: 0.5 secondMemory limit: 64 MB Den has two four-digit combination loc ...
- UVA 11947 Cancer or Scorpio 水题
Cancer or Scorpio Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://uva.onlinejudge.org/index.php? ...
- 用VC资源动态链接库解决国际化问题
http://daixinghe.blog.163.com/blog/static/1843615920097181952979/ 随着计算机应用的普及,应用软件跨国使用越来越频繁,如何实现应用软件的 ...