日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql 嵌入式 c开发环境_【Linux】嵌入式C语言MySQL编程(libmysqlclient-dev使用)

發(fā)布時(shí)間:2025/3/20 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 嵌入式 c开发环境_【Linux】嵌入式C语言MySQL编程(libmysqlclient-dev使用) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

準(zhǔn)備工作

相關(guān)函數(shù)解釋

C變量類型

C語(yǔ)言常用開發(fā)接口

mysql_init

mysql_real_connect

mysql_query

mysql_store_result

mysql_fetch_row

mysql_free_result和mysql_close

錯(cuò)誤處理

一些輔助函數(shù)

實(shí)踐一下

補(bǔ)充

準(zhǔn)備工作

搜索是否包含依賴庫(kù)

sudo apt-cache search mysqlclient-dev

(顯然打錯(cuò)了,是libmysqlclient-dev庫(kù))

安裝依賴庫(kù)

sudo apt install libmysqlclient-dev

查看是否已經(jīng)安裝

sudo apt list --installed |grep libmysqlclient-dev

查看頭文件是否已經(jīng)包含

find /usr|grep mysql.h

相關(guān)函數(shù)解釋

C變量類型

MYSQL

表示對(duì)一個(gè)數(shù)據(jù)庫(kù)的連接句柄;

MYSQL_RES

代表返回行的一個(gè)查詢的(SELECT, SHOW, DESCRIBE, EXPLAIN)的結(jié)果。返回的數(shù)據(jù)稱為“數(shù)據(jù)集”,用過數(shù)據(jù)庫(kù)的應(yīng)該對(duì)數(shù)據(jù)庫(kù)中查詢后得到的結(jié)果集不會(huì)陌生,在C的API里對(duì)應(yīng)的就是MYSQL_RES了,從數(shù)據(jù)庫(kù)讀取數(shù)據(jù),最后就是從MYSQL_RES中讀取數(shù)據(jù)。

MYSQL_ROW

這是一個(gè)行數(shù)據(jù)的類型安全(type-safe)的表示。當(dāng)前它實(shí)現(xiàn)為一個(gè)計(jì)數(shù)字節(jié)的字符串?dāng)?shù)組。(如果字段值可能包含二進(jìn)制數(shù)據(jù),你不能將這些視為空終止串,因?yàn)檫@樣的值可以在內(nèi)部包含空字節(jié)) 行通過調(diào)用mysql_fetch_row()獲得。

MYSQL_FIELD

這個(gè)結(jié)構(gòu)包含字段信息,例如字段名、類型和大小。其成員在下面更詳細(xì)地描述。你可以通過重復(fù)調(diào)用mysql_fetch_field()對(duì)每一列獲得MYSQL_FIELD結(jié)構(gòu)。字段值不是這個(gè)結(jié)構(gòu)的部分;他們被包含在一個(gè)MYSQL_ROW結(jié)構(gòu)中。

MYSQL

表示對(duì)一個(gè)數(shù)據(jù)庫(kù)的連接句柄;

MYSQL_RES

個(gè)結(jié)構(gòu)代表返回行的一個(gè)查詢的(SELECT, SHOW, DESCRIBE, EXPLAIN)的結(jié)果。返回的數(shù)據(jù)稱為“數(shù)據(jù)集”,用過數(shù)據(jù)庫(kù)的應(yīng)該對(duì)數(shù)據(jù)庫(kù)中查詢后得到的結(jié)果集不會(huì)陌生,在C的API里對(duì)應(yīng)的就是MYSQL_RES了,從數(shù)據(jù)庫(kù)讀取數(shù)據(jù),最后就是從MYSQL_RES中讀取數(shù)據(jù)。

MYSQL_ROW

這是一個(gè)行數(shù)據(jù)的類型安全(type-safe)的表示。當(dāng)前它實(shí)現(xiàn)為一個(gè)計(jì)數(shù)字節(jié)的字符串?dāng)?shù)組。(如果字段值可能包含二進(jìn)制數(shù)據(jù),你不能將這些視為空終止串,因?yàn)檫@樣的值可以在內(nèi)部包含空字節(jié)) 行通過調(diào)用mysql_fetch_row()獲得。

MYSQL_FIELD

這個(gè)結(jié)構(gòu)包含字段信息,例如字段名、類型和大小。其成員在下面更詳細(xì)地描述。你可以通過重復(fù)調(diào)用mysql_fetch_field()對(duì)每一列獲得MYSQL_FIELD結(jié)構(gòu)。字段值不是這個(gè)結(jié)構(gòu)的部分;他們被包含在一個(gè)MYSQL_ROW結(jié)構(gòu)中。

my_ulonglong

該類型用于行編號(hào)和mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()。

該類型用于行編號(hào)和mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()。

C語(yǔ)言常用開發(fā)接口

mysql_init

原型:MYSQL *mysql_init(MYSQL *mysql)

mysql_init的作用是初始化MYSQL變量,為mysql_real_connect()做準(zhǔn)備。

返回值:MYSQL句柄或描述符;內(nèi)存不足是為NULL;

mysql_real_connect

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 int client_flag)

說(shuō)明:

如果port!=0, 則將作為TCP/IP端口使用,為0則使用 表示使用默認(rèn)端口號(hào)3306;

如果unix_socket!=NULL,則可指定socket或命名PIPE,默認(rèn)為NULL;

client_flag可以指定特定的值(略),默認(rèn)為0.

mysql_query

功能:執(zhí)行sql命令 原型: int mysql_query(MYSQL *mysql, const char *query) 說(shuō)明:

query為數(shù)據(jù)庫(kù)操作命令字符串,本義是查詢(select),可包括select,update,insert,delete等對(duì)數(shù)據(jù)庫(kù)操作的命令。

返回值:0表示正常,非0表示發(fā)生了錯(cuò)誤。

說(shuō)明:

sprintf:將指令寫入緩沖區(qū),動(dòng)態(tài)生成字符串

使用前需要先定義一個(gè)緩沖區(qū)的數(shù)組sqlcommand[]

mysql_store_result

功能:結(jié)果集處理。如果使用mysql_query運(yùn)行的是一個(gè)SELECT語(yǔ)句,或其它可以返回結(jié)果的查詢,可用函數(shù)mysql_store_result來(lái)訪問返回結(jié)果并將其保存在一個(gè)變量中,以便做進(jìn)一步處理。

用法:

MYSQL_RES *mysql_store_result(MYSQL *mysql)

MYSQL_RES *mysql_use_result(MYSQL *mysql)

說(shuō)明:

mysql為mysql_real_connect函數(shù)的返回值。

使用了mysql_store_result函數(shù)保存結(jié)果后,可以使用以下函數(shù)對(duì)結(jié)果集進(jìn)行處理。

獲得結(jié)果集中的行數(shù): my_ulonglong mysql_num_rows(MYSQL_RES *result)

讀取結(jié)果集中的一行: MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

mysql_fetch_row

獲得結(jié)果集中的域的屬性:

MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)

獲得域?qū)傩詳?shù)組:

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)

查詢被update、delete、insert等受影響的行:

my_ulonglong mysql_affected_rows(MYSQL *mysql)

mysql_free_result和mysql_close

當(dāng)對(duì)數(shù)據(jù)庫(kù)使用完畢后,應(yīng)對(duì)所創(chuàng)建的變量等進(jìn)行釋放:

mysql_free_result(result);

mysql_close(&mysql);

錯(cuò)誤處理

利用函數(shù)的返回值來(lái)判斷函數(shù)執(zhí)行是否正確。

使用mysql提供的錯(cuò)誤號(hào)和錯(cuò)誤信息:

錯(cuò)誤號(hào): unsigned int mysql_errno(MYSQL *mysql)

錯(cuò)誤信息: char *mysql_error(MYSQL *mysql)

一些輔助函數(shù)

獲取客戶機(jī)版本信息:

char *mysql_get_client_info(void)

獲取主機(jī)信息:

char *mysql_get_host_info(MYSQL *mysql)

獲取協(xié)議版本信息:

unsigned int mysql_get_proto_info(MYSQL *mysql)

獲取服務(wù)器版本信息:

char *mysql_get_server_info(MYSQL *mysql)

獲取可用數(shù)據(jù)庫(kù)列表:

MYSQL_RES *mysql_list_dbs(MYSQL *mysql, const char *wild)

獲取數(shù)據(jù)庫(kù)的可有表列表

MYSQL_RES *mysql_list_tables(MYSQL *mysql, const char *wild)

實(shí)踐一下

完整代碼

#include

#include

#include

int main(void)

{

MYSQL com_mysql;//聲明一個(gè)數(shù)據(jù)庫(kù)連接句柄

char sqlcommand[100];

MYSQL_RES *pRes;

MYSQL_ROW hs;

if(mysql_init(&com_mysql)==NULL)//使用指針尋址,要用到&

{

printf("Cannot init mysql!\n");

return 0;

}

if(mysql_real_connect(&com_mysql,"【域名或者主機(jī)ip】","【用戶名】","【密碼】","【數(shù)據(jù)庫(kù)名稱】",0,NULL,0)==NULL)//相對(duì)應(yīng)替換自己的ip、用戶名、密碼、數(shù)據(jù)庫(kù)

{

printf("%s\n",mysql_error(&com_mysql));

return 0;

}

sprintf(sqlcommand,"select * from student");//寫入緩存區(qū),換成自己的表名,這里使用的是student

if(mysql_query(&com_mysql,sqlcommand)!=0)

{

printf("%s\n",mysql_error(&com_mysql));

return 0;

}

if((pRes=mysql_store_result(&com_mysql))==NULL)

{

printf("%s\n",mysql_error(&com_mysql));

return 0;

}

while(hs=mysql_fetch_row(pRes))

{

//printf("id=%d,age=%d,name=%s\n",hs[0],hs[1],hs[2]);//錯(cuò):因?yàn)閙ysql_fetch_row已經(jīng)把字段值轉(zhuǎn)換為字符串了

printf("id=%s,age=%s,name=%s\n",hs[0],hs[1],hs[2]);

}

mysql_free_result(pRes);

mysql_close(&com_mysql);//善后處理

return 0;

}

編譯:gcc -o mysql mysql.c -lmysqlclient

因?yàn)閘ibmysqlclient-dev是第三方庫(kù),結(jié)尾要加入 -lmysqlclient

補(bǔ)充

suse安裝mysqlclient

sudo zypper install libmysqlclient-devel

總結(jié)

以上是生活随笔為你收集整理的mysql 嵌入式 c开发环境_【Linux】嵌入式C语言MySQL编程(libmysqlclient-dev使用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。