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


要給C++程序連接MySQL數據庫,分別需要:

  • 安裝MySQL Server
  • 下載MySQL Connector/C++
  • 在IDE中配置依賴
  • 然后就可以在代碼中調用API,來連接以及操作數據庫。

一、安裝MySQL Server

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

創建數據庫
mysql> create database test;

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

查看已有的表
mysql> show tables;

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

二、下載MySQL Connector/C++

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

三、IDE中配置依賴,以Visual Studio 2015為例

為了在我們的C++工程里方便地引用 Connector/C++庫,就要配置一下項目的依賴。
Windows10系統下編寫C++工程我一般用VS,其他的IDE可以參考官方文檔,如Linux中用NetBeans:Building Connector/C++ Windows Applications with Microsoft Visual Studio,以下內容也是參考文檔的。

3.1 選擇編譯方式

配置依賴前,先將默認的Debug模式改為Release模式。如果修改了編譯方式,配置自然就改變了。

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文件可以被找到。

3.4 靜態庫和動態庫:

動態庫與靜態庫優缺點比較
接着根據我們的需要,執行后續步驟:
如果用靜態庫,可能比較麻煩,因為靜態庫需要和編譯器版本相匹配,因此需要手動編譯一份,如果選擇動態庫可以直接跳轉到3.5

3.4.1 下載MySQL Connector/C++源碼

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

3.4.2 下載安裝CMake

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

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

四、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM