1. 程式人生 > >VS2017+MySQL8.0+MySQLconnector連線資料庫

VS2017+MySQL8.0+MySQLconnector連線資料庫

實驗室需要使用C++進行資料庫應用開發,現將MySQL連線的過程記錄如下:

環境搭建

Windows10、VS2017、MySQL8.0、MySQL Connector/C++ 1.1.11、boost1.67.0

1、建立學生管理系統資料庫

create database university;

這裡為了簡單測試,只是建立一張學生表,建立的表如下:

create table student(
    Sno int ,
    Sname varchar (50),
    Ssex varchar(2),
    Sage int ,
    primary key (Sno)
    );

插入資料:
為簡單起見,這裡只插入倆條資料

insert into student(Sno, Sname, Ssex, Sage) values(20081001197,'李子聰','M',17);
insert into student(Sno, Sname, Ssex, Sage) values(20081001266,'蔡景學','F',19);

建立好的結果如下:
在資料庫命令列檢視:

select * from student;

這裡寫圖片描述

專案配置

配置依賴前,先將預設的Debug模式改為Release模式
這裡寫圖片描述
1、新建TestMySQLAPP 控制檯專案
這裡寫圖片描述
這裡或者直接新建一個空專案也可以
2、依賴配置

右鍵專案->屬性->VC++目錄

包含目錄
這裡寫圖片描述
點選編輯
這裡寫圖片描述
將已經下載解壓好的Connector C++ 1.1.11\include 資料夾新增進去
比如我的解壓包路徑是

C:\Program Files\MySQL\Conector C++ 1.1.11\mysql-connector-c++-noinstall-1.1.11-winx64\include

以同樣的方式將boost1.67.0 檔案目錄包含
我的解壓包路徑是:

D:\Boost1.67.0\boost_1_67_0

這裡需要說一下為什麼需要將boost 庫包含進去,開始的時候我沒有包含這部分,但是在執行過程中在mysql_connection.h

檔案中又引用了這個庫,我開始想著直接把其中引用部分的程式碼路徑改一下,讓其指向boost包對應的路徑,結果發現修改後沒有儲存許可權,所以還是老老實實將這個庫目錄包含進去
配置好以上的以後接下來將Connector/C++ 的lib包含進去,還是在專案的屬性頁

連結器->常規->附加庫目錄

以同樣的方式新增,比如我的路徑是

C:\Program Files\MySQL\Conector C++ 1.1.11\mysql-connector-c++-noinstall-1.1.11-winx64\lib

新增以後的結果如下:
這裡寫圖片描述
接著在連結器->輸入 部分將mysqlcppconn.lib 新增
這裡寫圖片描述
到這裡基本上就將所有的配置完成,但是在執行過程中還是出現了一些錯誤,這部分沒有截圖,所以直接將解決的方法記錄,參考的文章不記得是哪些部落格,這裡表示感謝
簡單來說就是需要將對應的一些動態庫新增到C:\Windows\System32 目錄中,這裡我不太清楚為什麼會出現錯誤,按照我的想法是在之前的配置中已經把Connectorlib 全部新增到了專案中,為什麼這裡還是要把一些動態的庫檔案放到C:\Windows\System32 目錄,但是確實結果是解決了問題。找到Connector/C++ 解壓包路徑,比如我的是

C:\Program Files\MySQL\Conector C++ 1.1.11\mysql-connector-c++-noinstall-1.1.11-winx64\lib

將其中的.dll 檔案全部拷貝貼上到C:\Windows\System32 目錄,然後執行即可

測試連線

環境已經搭建完成,接下來測試一些簡單的功能,在TestMySQLAPP.cpp 檔案中
這裡寫圖片描述
這個檔案其實就是你建立空專案的Main.cpp ,也就是程式的入口,新增以下程式碼:

#include <stdafx.h>
#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 sage from student where sno = '20081001197'" << 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", "root"); // 需要修改為你資料庫的使用者密碼
        /* 連線 MySQL 資料庫 university  */
        con->setSchema("university");

        stmt = con->createStatement();
        res = stmt->executeQuery("SELECT sage from student where sno = '20081001197'"); // 標準sql語句
        while (res->next()) {
            cout << "\t MySQL replies: ";
            /* 通過數字偏移量, 1 代表第一列 */
            cout << res->getInt(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;
}

結果:
這裡寫圖片描述
與資料庫中結果一致,正確連線!