【C++】VS2015/VS2017鏈接Mysql數據庫教程

要給C++程序鏈接MySQL數據庫,分別須要:html

  • 安裝MySQL Server
  • 下載MySQL Connector/C++
  • 在IDE中配置依賴
  • 而後就能夠在代碼中調用API,來鏈接以及操做數據庫。

1、安裝MySQL Server

這是MySQL 數據庫服務,下載了它才能在本身的電腦中使用MySQL。
下載頁面:Download MySQL Installer
參考教程:windows10上安裝mysql(詳細步驟)
安裝好後,咱們打開MySQL 5.7 Command Line Client(在開始菜單的快捷方式裏,也能夠搜索一下),而後mysql

建立數據庫
mysql> create database test;

使用數據庫(這句不能加分號)
mysql> use test

查看已有的表
mysql> show tables;

建立表
mysql> create table testuser ( id INT, name CHAR(20));

2、下載MySQL Connector/C++

這是鏈接MySQL的庫,咱們在C++中須要使用該庫來鏈接數據庫。
下載頁面:Download Connector/C++linux

3、IDE中配置依賴,以Visual Studio 2015爲例

爲了在咱們的C++工程裏方便地引用 Connector/C++庫,就要配置一下項目的依賴。
Windows10系統下編寫C++工程我通常用VS,其餘的IDE能夠參考官方文檔,如Linux中用NetBeans:Building Connector/C++ Windows Applications with Microsoft Visual Studio,如下內容也是參考文檔的。ios

3.1 選擇編譯方式

配置依賴前,先將默認的Debug模式改成Release模式。若是修改了編譯方式,配置天然就改變了。
sql

3.2 添加額外的Include目錄

  • 在VS菜單中選擇 項目屬性 =>C/C++=> 輸入 => 附加包含目錄

  • 點擊 ,而後選擇NewLine(黃色按鈕),點「...」按鈕選擇MySQL Connector的路徑,例如個人是 C:\Program Files\MySQL\MySQL Connector C++ 1.1.8\include

這一步是爲了讓咱們的C++程序能夠引用鏈接sql相關的頭文件。數據庫

3.3 添加額外的庫目錄

接着是 項目屬性 => 連接器 => 輸入 => 附加依賴庫
一樣的方法,路徑是C:\Program Files\MySQL\MySQL Connector C++ 1.1.8\lib\opt
這一步使得.lib文件能夠被找到。windows

3.4 靜態庫和動態庫:

動態庫與靜態庫優缺點比較
接着根據咱們的須要,執行後續步驟:
若是用靜態庫,可能比較麻煩,由於靜態庫須要和編譯器版本相匹配,所以須要手動編譯一份,若是選擇動態庫能夠直接跳轉到3.5app

3.4.1 下載MySQL Connector/C++源碼

官方下載頁面,系統選擇Source Code,而後版本選擇64位,下載windows對應的版本。tcp

3.4.2 下載安裝CMake

官方下載頁面,下載最新的CMake的Windows win64-x64 Installer,安裝好。ide

3.4.3 在vs中編譯運行支持vs2017的靜態庫

#ifndef HAVE_STRUCT_TIMESPEC /* Windows before VS2015 */

上面加上

#define  HAVE_STRUCT_TIMESPEC

就行了。將編譯出來的xxx.lib更名爲mysqlcppconn-static.lib,放到項目根目錄

3.5 添加額外的依賴

若是是靜態庫,須要:

  • 在 項目屬性 => C/C++=>預處理器=> 預處理中輸入 CPPCONN_PUBLIC_FUNC=

  • 在 項目屬性 => 連接器 => 輸入 => 附加依賴庫 中添加 mysqlcppconn-static.liblibmysql.lib

  • libmysql.lib 的目錄 C:\Program Files\MySQL\MySQL Server 5.7\lib 要填在 Configuration Properties => Linker => General => Additional Library directories中。

若是是動態庫,則:

  • 在 項目屬性 => 連接器 => 輸入 => 附加依賴庫中添加 mysqlcppconn.lib

  • C:\Program Files\MySQL\MySQL Connector C++ 1.1.8\lib\opt下的mysqlcppconn.dll複製到咱們的windows\system32目錄下或者項目根目錄\x64\Release下。

3.6 下載安裝boost庫

我在後續編譯過程當中報錯說fatal error C1083: Cannot open include file: boost/shared_ptr.hpp
原來是項目沒有添加boost庫的額外Include目錄,而mysql_connection.h中又引用了該庫。所以這一步也是須要的。
下載地址:boost_1_64_0-msvc-14.1-64.exe
下載安裝好後, 項目屬性 =>C/C++=> 輸入 => 附加包含目錄 中添加C:\local\boost_1_64_0

4、C++鏈接的例子

#include <stdlib.h>
#include <iostream>

#include "mysql_connection.h"

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

using namespace std;

int main()
{
    cout << endl;
    cout << "正在執行 'SELECT 'Hello World!' AS _message'..." << endl;

    try {
        sql::Driver *driver;
        sql::Connection *con;
        sql::Statement *stmt;
        sql::ResultSet *res;

        /* 建立鏈接 */
        driver = get_driver_instance();
        con = driver->connect("tcp://127.0.0.1:3306", "root", "pwd");
        /* 鏈接 MySQL 數據庫 test  */
        con->setSchema("test");

        stmt = con->createStatement();
        res = stmt->executeQuery("SELECT 'Hello World!' AS _message");
        while (res->next()) {
            cout << "\t... MySQL replies: ";
            /* 獲取某列屬性值經過列名 */
            cout << res->getString("_message") << endl;
            cout << "\t... MySQL says it again: ";
            /* 經過數字偏移量, 1 表明第一列 */
            cout << res->getString(1) << endl;
        }
        delete res;
        delete stmt;
        delete con;

    }
    catch (sql::SQLException &e) {
        cout << "# ERR: SQLException in " << __FILE__;
        cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
        cout << "# ERR: " << e.what();
        cout << " (MySQL error code: " << e.getErrorCode();
        cout << ", SQLState: " << e.getSQLState() << " )" << endl;
    }

    cout << endl;

    return EXIT_SUCCESS;
}

更多操做見官方教程:Chapter 8 Connector/C++ Tutorials

相關文章
相關標籤/搜索