mysql Connector C++ 操作数据库 vs2012

  1. 云栖社区>
  2. 博客>
  3. 正文

mysql Connector C++ 操作数据库 vs2012

技术小阿哥 2017-11-27 14:33:00 浏览993
展开阅读全文

最近想写一个应用程序,要连接和操作mysql数据库,以前只是用c++ builder 操作过mysql数据库,那是用控件操作的,感觉比较弱智,但是c++ builder vcl控件感觉在多线程里比较坑,所以用vs2012做了。

c++连接mysql有两种方式,1是原始的方法,2是用 Connector c++ 。Connector c++  只是一种封装,使之更加方便.本方只记下关于 Connector c++ 操作数据库。

想写一个demo 测试一下。

mysql connector c++ 调用 方式 有两种,一种是动态链接库调用 ,一种是静态库调用。静态库试了一整天不行,都是以 get_mysql_driver_instance() 没有链接到而靠终,后来才知道 新版本的connector c++ 如果以静态方式调用的话是不再用这个函数了 可是官方文档中没有说不用get_mysql_driver_instance这个函数是怎么操作数据库的。静态失败了,搞动态吧。

动态库调用方式是若干 .h 文件和一个 mysqlcppconn.lib 链接之后在运行期间会调用mysqlcppconn.dll貌似运行期间还要调用  libmysql.dll 。

下面说步骤

1.首先把把connector c++ include文件夹 加到工程包含目录里

2.其次链接lib 其中分为debug版和 release 版

复制代码
#ifdef _DEBUG
#pragma  comment(lib,"..\\dynamic_lib\\Debug_\\mysqlcppconn.lib")
#else
#pragma  comment(lib,"..\\dynamic_lib\\Release_\\mysqlcppconn.lib")
#endif // DEBUG
复制代码

3.直接调用函数了 ,以下代码测试正确 vs2012 win7 64位

复制代码
// TestMySql.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "mysql_connection.h"
#include "mysql_driver.h"
#include "mysql_error.h"


#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>

#include <iostream>
using namespace std;

#ifdef _DEBUG
#pragma  comment(lib,"..\\dynamic_lib\\Debug_\\mysqlcppconn.lib")
#else
#pragma  comment(lib,"..\\dynamic_lib\\Release_\\mysqlcppconn.lib")
#endif // DEBUG




int _tmain(int argc, _TCHAR* argv[])
{
    sql::mysql::MySQL_Driver *driver = NULL;
    sql::Connection *con = NULL;
    driver = sql::mysql::get_mysql_driver_instance();
    if(driver == NULL)
    {
        cout<<"driver is null"<<endl;
        goto END;
    }
    con = driver->connect("tcp://localhost:3306", "root", "3342125");
    if(con == NULL)
    {
        cout<<"conn is null"<<endl;
        goto END;
    }

    cout<<"连接数据库成功"<<endl;

    sql::Statement * stmt = NULL;
    stmt = con->createStatement();
    if(stmt == NULL)
    {
        cout<<"stmt is null"<<endl;
        goto END;
    }
    stmt->execute("SET CHARSET GB2312");
    stmt->execute("USE zhanbao");
    sql::ResultSet * resultSet =  stmt->executeQuery("这里写查询语句  ");
    int i = 0;
    while (resultSet->next()) {
        cout << ", label = '" << resultSet->getString("ACCOUNT") << "'" << endl;
        i++;
    }

    cout<<""<<i<<""<<endl;

    con->close();
    delete stmt;
    delete con;

END:
    system("pause");

    return 0;
}
复制代码

网友评论

登录后评论
0/500
评论
技术小阿哥
+ 关注