记录编译 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的更多相关文章

  1. Linux下MySQL c++ connector示例

    最近在学习数据库的内容,起先是在windows下用mysql c++ connector进行编程,之所以选用c++而不是c的api,主要是考虑到c++ connector是按照JDBC的api进行实现 ...

  2. 转载:Centos7 从零编译Nginx+PHP+MySql 二

    序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...

  3. 转载:Centos7 从零编译Nginx+PHP+MySql 序言 一

    这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先的一些 ...

  4. [原创]Centos7 从零编译Nginx+PHP+MySql

    序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...

  5. CentOS下PHP7的编译安装,MySQL的支持和一些问题的解决

    最近试了一下PHP7,在编译和支持MySQL上都遇到一些问题,相信不少同学也同样遇到,所以在这里聊一下这个过程.简单来讲编译PHP7只需要3步: 1../buildconf --force 2../c ...

  6. mysql ODBC connector相关问题

    mysql ODBC connector我安装了,怎么就不成功了 进到命令行,运行下边的:C:\>cd \windows\SysWOW64 C:\Windows\SysWOW64>odbc ...

  7. CentOS 6.0最小化编译安装Nginx+MySQL+PHP+Zend

    http://www.osyunwei.com/archives/235.html 引言: 操作系统:CentOS 6.0 32位         下载地址:http://mirrors.163.co ...

  8. CentOS6.6 32位 Minimal版本纯编译安装Nginx Mysql PHP Memcached

    声明:部分编译指令在博客编辑器里好像被处理了,如双横线变成单横线了等等,于是在本地生成了一个pdf版本,在下面地址可以下载. LNMP+Memcached CentOS是红帽发行的免费的稳定Linux ...

  9. windows下编译qt的mysql驱动

    windows下编译qt的mysql驱动cd %QTDIR%\src\plugins\sqldrivers\mysqlqmake –o Makefile INCLUDEPATH+="C:\M ...

随机推荐

  1. [UOJ422]小Z的礼物

    设要取的物品集合为$S$,$E=n(m-1)+(n-1)m$,$x_T$为覆盖了$T$中至少一个元素的$1\times2$数量 $$\begin{aligned}\sum\limits_{i=1}^\ ...

  2. 在Kali Linux上编译Windows EXP

    使用vc6.0去编译的时候,难免会出现点问题 这里找到MS11-046的exp来编译 poc地址:https://www.exploit-db.com/exploits/40564/ 首先需要安装mi ...

  3. python编程之socket编程基础

    python socket编程,首先需要import   socket模块 首先创建一个socket对象 expl = socket.socket(socket.AF_INET,socket.SOCK ...

  4. Linux下rz,sz与ssh的配合使用,实现文件传输

    一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地:    与ss ...

  5. SQL SERVER中获取表间主外键关系

    sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OB ...

  6. Alpha冲刺(1/10)——追光的人

    1.队友信息 队员学号 队员博客 221600219 小墨 https://www.cnblogs.com/hengyumo/ 221600240 真·大能猫 https://www.cnblogs. ...

  7. iOS 视频组件

    公司最近要在项目里新增一个随手拍的功能,所以呢我在网上找了个比较不错的demo,顺便研究了下它的代码结构.感谢大神的分享,如有侵权,请告知哦!

  8. 你了解for循环吗

    大家学什么语言都会学for循环 可是你真的会用吗 通常写法都是 var arr=arr[1,2,3,4]; for(var i=0;i<arr.length;i++){ console.log( ...

  9. 伟大的通信使者——JSON(JavaScript版本)

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表 ...

  10. 在EntityFramework6中管理DbContext的正确方式——4DbContextScope:一个简单的,正确的并且灵活的管理DbContext实例的方式(外文翻译)

    (译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...