最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用C/C++鏈接mysql數(shù)據(jù)庫(kù)

 更新時(shí)間:2025年09月22日 09:08:52   作者:餓了我會(huì)自己撿代碼吃  
本文給大家介紹了MySQL數(shù)據(jù)庫(kù)的安裝方法(手動(dòng)導(dǎo)入或系統(tǒng)指令)及接口使用流程,包括初始化、鏈接、執(zhí)行SQL、獲取結(jié)果、釋放內(nèi)存等關(guān)鍵步驟,強(qiáng)調(diào)編碼設(shè)置為UTF-8、正確處理頭文件路徑和內(nèi)存泄漏問(wèn)題,感興趣的朋友跟隨小編一起看看吧

一、安裝數(shù)據(jù)庫(kù)

安裝我們要使用的數(shù)據(jù)庫(kù)有兩種方法

  1. 手動(dòng)安裝包導(dǎo)入
    在數(shù)據(jù)庫(kù)的官網(wǎng)找到對(duì)應(yīng)版本的安裝包,然后導(dǎo)入自己的系統(tǒng)庫(kù)中去,在項(xiàng)目需要時(shí)用include包一下頭庫(kù)文件即可
  2. 直接用系統(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ù)。

  1. 獲取結(jié)果行數(shù)mysql_num_rows
my_ulonglong mysql_num_rows(MYSQL_RES *res);
  1. 獲取結(jié)果列數(shù)mysql_num_fields
unsigned int mysql_num_fields(MYSQL_RES *res);
  1. 獲取列名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);

相關(guān)文章

最新評(píng)論

郧西县| 沙湾县| 株洲市| 茂名市| 彰武县| 伊川县| 河北省| 商水县| 阳东县| 凤翔县| 阳谷县| 广东省| 温泉县| 泰顺县| 江门市| 宿迁市| 永济市| 高邑县| 吉隆县| 玉树县| 江门市| 进贤县| 高青县| 高密市| 莱西市| 河南省| 五原县| 简阳市| 清丰县| 崇文区| 西昌市| 四平市| 茂名市| 沈阳市| 十堰市| 怀安县| 濮阳市| 巨鹿县| 崇义县| 手游| 新野县|