如何使用C/C++鏈接mysql數(shù)據(jù)庫(kù)
一、安裝數(shù)據(jù)庫(kù)
安裝我們要使用的數(shù)據(jù)庫(kù)有兩種方法
- 手動(dòng)安裝包導(dǎo)入
在數(shù)據(jù)庫(kù)的官網(wǎng)找到對(duì)應(yīng)版本的安裝包,然后導(dǎo)入自己的系統(tǒng)庫(kù)中去,在項(xiàng)目需要時(shí)用include包一下頭庫(kù)文件即可 - 直接用系統(tǒng)指令下載
以Ubantu20.04舉例
sudo apt install -y libmysqlclient-dev
這樣我們的庫(kù)中就將mysql安裝包下載好了,在使用時(shí)如果報(bào)錯(cuò)記得在編譯時(shí)包一下頭文件和庫(kù)文件的路徑
例如:
g++ -o $@ $^ -I./include -L./lib -lmysqlclient
如果找不到可以使用下面的指令,可以找出這個(gè)庫(kù)安裝的所有文件的路徑
dpkg -L libmysqlclient-dev

include 包含所有的方法聲明, lib 包含所有的方法實(shí)現(xiàn)(打包成庫(kù))
二、接口使用
1.初始化
使用庫(kù)之前先初始化
MYSQL *mysql_init(MYSQL *mysql);
例:
//1.初始化
if(my==nullptr)
{
std::cerr<<"init error"<<std::endl;
return 1;
}2.鏈接
初始化完畢之后,必須先鏈接數(shù)據(jù)庫(kù),在進(jìn)行后續(xù)操作
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag);
舉例:
//2.連接
if(mysql_real_connect(my,host.c_str(),user.c_str(),password.c_str(),db.c_str(),port,nullptr,0)==nullptr)
{
std::cerr<<"connect error"<<std::endl;
return 2;
}
如果發(fā)現(xiàn)自己數(shù)據(jù)出現(xiàn)亂碼的情況,可能是編碼沒(méi)有將編碼沒(méi)有設(shè)置好
默認(rèn)是latin,可以顯示英文,但要顯示中文需將默認(rèn)字符集改為utf_8
mysql_set_character_set(myfd, "utf8");
3.執(zhí)行mysql命令
int mysql_query(MYSQL *mysql, const char *q);
第一個(gè)參數(shù)為初始化的返回值,第二個(gè)參數(shù)為要執(zhí)行的sql語(yǔ)句,如“select * from table”
//3.命令
std::string sql="select * from users";
int n=mysql_query(my,sql.c_str());
if(n==0)
{
std::cout<<"query "<<sql<<" success"<<std::endl;
}
else
{
std::cerr<<"query "<<sql<<" error"<<std::endl;
return 3;
}
到這里如果我們執(zhí)行的是增刪改等修改操作的話,就已經(jīng)成功執(zhí)行了,但如果是要執(zhí)行查找等需要查看結(jié)果的SQL語(yǔ)句,我們就還需要通過(guò)一個(gè)接口來(lái)獲取查找的數(shù)據(jù)
4.查看執(zhí)行結(jié)果數(shù)據(jù)
MYSQL_RES *mysql_store_result(MYSQL *mysql);
MYSQL_RES* res = mysql_store_result(my);
該函數(shù)會(huì)調(diào)用MYSQL變量中的st_mysql_methods中的 read_rows 函數(shù)指針來(lái)獲取查詢(xún)的結(jié)果。
同時(shí)該函數(shù)會(huì)返回MYSQL_RES 這樣一個(gè)變量,該變量主要用于保存查詢(xún)的結(jié)果,同時(shí)malloc了一片內(nèi)存空間來(lái)存儲(chǔ)查詢(xún)過(guò)來(lái)的數(shù)據(jù),所以我們一定要記的 free(result),不然是肯定會(huì)造成內(nèi)存泄漏的。
執(zhí)行完mysql_store_result以后,其實(shí)數(shù)據(jù)都已經(jīng)在MYSQL_RES 變量中了,下面的api就是來(lái)讀取MYSQL_RES 中的數(shù)據(jù)。
- 獲取結(jié)果行數(shù)mysql_num_rows
my_ulonglong mysql_num_rows(MYSQL_RES *res);
- 獲取結(jié)果列數(shù)mysql_num_fields
unsigned int mysql_num_fields(MYSQL_RES *res);
- 獲取列名mysql_fetch_fields
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);
- 獲取列名屬性
//屬性
MYSQL_FIELD *fields_array = mysql_fetch_fields(res);
for(int i=0;i<fields;i++)
{
std::cout<<fields_array[i].name<<"\t";
}
std::cout<<std::endl;

- 獲取數(shù)據(jù)
//數(shù)據(jù)
for(int i=0;i<rows;i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
for(int j=0;j<fields;j++)
{
std::cout<<row[j]<<"\t";
}
std::cout<<std::endl;
}

5.釋放空間,關(guān)閉mysql鏈接
// 釋放結(jié)果空間 mysql_free_result(res); // 關(guān)閉mysql連接 mysql_close(my);
- C++連接數(shù)據(jù)庫(kù)SqlServer、MySql、Oracle、Access、SQLite、PostgreSQL、MongoDB、Redis
- 使用C++實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池
- C/C++連接MySQL數(shù)據(jù)庫(kù)詳細(xì)圖文教程
- C++連接mysql數(shù)據(jù)庫(kù)(改進(jìn)版)
- C/C++代碼操作MySQL數(shù)據(jù)庫(kù)詳細(xì)步驟
- 如何利用C++實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)的連接池詳解
- C++連接并使用MySQL數(shù)據(jù)庫(kù)
- C++連接mysql數(shù)據(jù)庫(kù)的兩種方法小結(jié)
- C/C++ 連接MySql數(shù)據(jù)庫(kù)的方法
相關(guān)文章
MySQL count(*/column)查詢(xún)優(yōu)化的實(shí)現(xiàn)
count()是SQL中一個(gè)常用的聚合函數(shù),其被用來(lái)統(tǒng)計(jì)記錄的總數(shù),本文主要介紹了MySQL count(*/column)查詢(xún)優(yōu)化的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09
MySQL中文漢字轉(zhuǎn)拼音的自定義函數(shù)和使用實(shí)例(首字的首字母)
這篇文章主要介紹了MySQL中文漢字轉(zhuǎn)拼音的自定義函數(shù)和使用實(shí)例,需要的朋友可以參考下2014-06-06
MySQL連表更新實(shí)戰(zhàn)案例及常見(jiàn)錯(cuò)誤
更新數(shù)據(jù)是使用數(shù)據(jù)庫(kù)時(shí)最重要的任務(wù)之一,下面這篇文章主要介紹了MySQL連表更新實(shí)戰(zhàn)案例及常見(jiàn)錯(cuò)誤的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-12-12
mysql自動(dòng)定時(shí)備份數(shù)據(jù)庫(kù)的最佳方法(windows服務(wù)器)
網(wǎng)上有很多關(guān)于window下Mysql自動(dòng)備份的方法,可是真的能用的也沒(méi)有幾個(gè),有些說(shuō)的還非常的復(fù)雜,難以操作,這里腳本之家小編為大家分享與整理了幾個(gè)軟件方便大家使用2016-11-11
MySQL中使用SHOW PROFILE命令分析性能的用法整理
這篇文章主要介紹了MySQL中使用show profile命令分析性能的用法整理,show profiles是數(shù)據(jù)庫(kù)性能優(yōu)化的常用命令,需要的朋友可以參考下2015-11-11
mysql優(yōu)化的重要參數(shù) key_buffer_size table_cache
MySQL服務(wù)器端的參數(shù)有很多,但是對(duì)于大多數(shù)初學(xué)者來(lái)說(shuō),眾多的參數(shù)往往使得我們不知所措,但是哪些參數(shù)是需要我們調(diào)整的,哪些對(duì)服務(wù)器的性能影響最大呢2016-05-05
MySQL 數(shù)據(jù)庫(kù)跨操作系統(tǒng)的最快遷移方法
原始的是Windows 2003下的32位的MySQL數(shù)據(jù)庫(kù), 新的服務(wù)器是Sun的64位的小型機(jī),64位的MySQL數(shù)據(jù)庫(kù)。2009-02-02
MySQL?中的行鎖(Record?Lock)?和?間隙鎖(Gap?Lock)詳解
InnoDB中的行鎖(RecordLock)和間隙鎖(GapLock)是用于保證事務(wù)隔離性的兩種鎖機(jī)制,本文給大家介紹MySQL中的行鎖(Record?Lock)?和間隙鎖(Gap?Lock),感興趣的朋友跟隨小編一起看看吧2025-11-11

