C++ MYSQL連線及操作
阿新 • • 發佈:2021-02-11
C++ 連線MYSQL及執行SQL語句
前言
編譯環境為VS2015 + MYSQL5.7(或者以上)
一、下載MYSQL
這裡注意安裝的是MYSQL-Community-Server-Version,去MYSQL官網下載即可,現在最新的應該是8.0.23,我之前用的都是5.7的,不過不影響,連結如下:https://dev.mysql.com/downloads/windows/installer/8.0.html.
二、安裝VS2015
安裝教程有很多,這裡不再贅述,可參考這篇部落格 https://www.cnblogs.com/mabingxue/p/10826395.html
如果沒有其它開發需求的話,在選擇安裝選項時 只需安裝win sdk 以及C/C++即可。
三、MYSQL操作
1.配置環境
下載並安裝MYSQL後,網上通用的C++連線MYSQL共有兩種方式,這裡採用的是官方的API函式,即“mysql.h”
將MYSQL安裝目錄下的include和lib目錄分別新增進vs2015的包含和依賴目錄中,然後將lib下的libmysql.dll和libmysql.lib拷貝到專案目錄…/x64/Debug/下,最後在程式碼中加入以下程式碼
#pragma comment(lib, “libmysql.lib”)
進行動態連結,這裡注意下,架構必須為x64,不然無法使用libmysql.dll。目錄配置及最終程式碼配置如下:
程式碼如下:
#include <mysql.h>
using namespace std;
#pragma comment(lib,"libmySQL.lib")
2.連線MYSQL
程式碼如下:
//嘗試建立mysql連線
try
{
mysql_init(mysql);
// localhost:伺服器 root為賬號 123456為密碼 test為資料庫名 3306為埠
if (!mysql_real_connect(mysql, "localhost", "root", "123456", "test", 3306, NULL, 0))
{
cout << "connect mysql failed" << endl;
return 0;
}
}
catch (...)
{
return 0;
}
cout << "連線資料庫成功" << endl;
"root"為安裝MYSQL時設定的使用者名稱,“123456”為安裝MYSQL時設定的密碼,“test”為所要連線的資料庫名,這三處可自行更改。
3.MYSQL操作
查詢程式碼如下:
MYSQL_RES *res; //這個結構代表返回行的一個查詢結果集
string sqlStr; //執行的sql語句
string sqlStr = "select * from ScenarioNMEA where ScenarioName = '" + scenarioName + "'";
if (mysql_query(mysql, sqlStr.data()))
{
cout << "select failed" << endl;
return 0;
}
else
{
res = mysql_store_result(mysql); //query只是執行了sql語句,需要手動儲存結果集,而後才能輸出查詢到的結果,如行數等,與JAVA的JDBC不同
if (mysql_affected_rows(mysql) == 1) //判斷行數
{
}
else {
}
}
插入程式碼如下:
MYSQL_RES *res; //這個結構代表返回行的一個查詢結果集
string sqlStr; //執行的sql語句
sqlStr = "insert into ScenarioNMEA(ScenarioName, RecordFlag) values('" + scenarioName + "',1)";
if (mysql_query(mysql, sqlStr.data()))
{
cout << "sql handle failed" << endl;
}
else
{
res = mysql_store_result(mysql);
if (mysql_affected_rows(mysql) == 1)
{
cout << "insert success" << endl;
}
}
需要注意的是,"mysql_query"僅是執行了sql語句,而結果並沒有直接返回,與JDBC不同,需要通過“mysql_store_result”手動儲存結果集,或者通過“mysql_affected_rows”查詢受影響行數。 這裡僅展示了查詢以及插入的程式碼,刪除以及修改同理,修改sql語句即可。