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
配置好以上的以後接下來將
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
目錄中,這裡我不太清楚為什麼會出現錯誤,按照我的想法是在之前的配置中已經把Connector
的lib
全部新增到了專案中,為什麼這裡還是要把一些動態的庫檔案放到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;
}
結果:
與資料庫中結果一致,正確連線!