• mysql Connector C++ 操作数据库 vs2012


    最近想写一个应用程序,要连接和操作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;
    }
  • 相关阅读:
    java移位的具体应用
    mysql计划任务(轮询执行脚本)
    算法题(1)
    transient关键字及Serializable的序列化与反序列化
    java后台调用短信接口,实现发送短信验证码的控制层实现
    防卫导弹
    C++ STL
    字母转换
    三分·三分求极值
    各种数据类型取值范围
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/3599582.html
Copyright © 2020-2023  润新知