




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、此文章主要向大家描述的是安裝mysql 數(shù)據(jù)庫(kù)中獲得 mysql.h 建立 c接口的實(shí)際操作流程,首先我們是從安裝mysql 數(shù)據(jù)庫(kù)開(kāi)始的, 其中涉及相關(guān)的實(shí)際應(yīng)用代碼的描述,下面就是文章的具體內(nèi)容描述。先安裝 mysql 代碼: 1.sudo apt-get install mysql-server mysql-client 再裝開(kāi)發(fā)包代碼: 1.sudo apt-get install libmysqlclient15-dev 安裝 mysql 數(shù)據(jù)庫(kù)完以后, c代碼里添加頭文件代碼: 1.#include 編譯方法:代碼: 1.gcc $(mysql_config -cflags) xx
2、x.c -o xxx $(mysql_config -libs) 可以用以下代碼測(cè)試一下代碼: 1./* simple c program that connects to mysql database server*/ 2.#include 3.#include 4.main() 5.mysql *conn; 6.mysql_res *res; 7.mysql_row row; 8.char *server = localhost; 9.char *user = root; 10.char *password = ; 此處改成你的密碼1.char *database = mysql; 2.c
3、onn = mysql_init(null); 3./* connect to database */ 4.if (!mysql_real_connect(conn, server, 5.user, password, database, 0, null, 0) 6.fprintf(stderr, %sn, mysql_error(conn); 7.exit(1); 8. 9./* send sql query */ 10.if (mysql_query(conn, show tables) 11.fprintf(stderr, %sn, mysql_error(conn); 12.exit(
4、1); 13. 14.res = mysql_use_result(conn); 15./* output table name */ 16.printf(mysql tables in mysql database:n); 17.while (row = mysql_fetch_row(res) != null) 18.printf(%s n, row0); 19./* close connection */ 20.mysql_free_result(res); 21.mysql_close(conn); 22. 會(huì)輸出現(xiàn)有數(shù)據(jù)庫(kù)和表內(nèi)容。以上的相關(guān)內(nèi)容就是對(duì)安裝mysql 數(shù)據(jù)庫(kù)獲得 my
5、sql.h 建立 c接口的介紹,望你能有所收獲。6 月 27 日mysql編程接口在網(wǎng)上找了一些mysql c api 編程的文章,看了后覺(jué)得還是寫的不夠充分,根據(jù)自己經(jīng)驗(yàn)寫了這篇 the mysql c api 編程實(shí)例,希望對(duì)需要調(diào)用到mysql 的 c的 api 的朋友有所幫助,附例中的環(huán)境為redhat在這篇文章里,我們將學(xué)會(huì)怎么使用mysql 的 c apis(application programming interfaces 編程接口 ) 。為了很好地了解這篇文章,您需要具備以下前提知識(shí):c 語(yǔ)言變量c 語(yǔ)言函數(shù)c 語(yǔ)言指針簡(jiǎn)介c apis 包含在mysqlclient庫(kù)文件當(dāng)中
6、與mysql 的源代碼一塊發(fā)行,用于連接到數(shù)據(jù)庫(kù)和執(zhí)行數(shù)據(jù)庫(kù)查詢。有一些例子在mysql 原代碼的clients目錄里。mysql c 變量類型以下變量類型在mysql 的庫(kù)當(dāng)中定義。 我們需要這些變量是為了使用mysql 的函數(shù)。 這些變量有詳細(xì)的解釋,但是這些解釋對(duì)于寫代碼來(lái)說(shuō)并不重要。mysql以下代碼塊是用來(lái)連接數(shù)據(jù)庫(kù)的通訊過(guò)程,要連接mysql ,必須建立mysql 實(shí)例,通過(guò)mysql_init初始化方能開(kāi)始進(jìn)行連接,這個(gè)在后面會(huì)講到。typedef struct st_mysql net net; /* communication parameters */ gptr conne
7、ctor_fd; /* connectorfd for ssl */ char *host,*user,*passwd,*unix_socket, *server_version,*host_info,*info,*db; unsigned int port,client_flag,server_capabilities; unsigned int protocol_version; unsigned int field_count; unsigned int server_status; unsigned long thread_id; /* id for connection in ser
8、ver */ my_ulonglong affected_rows; my_ulonglong insert_id; /* id if insert on table with nextnr */ my_ulonglong extra_info; /* used by mysqlshow */ unsigned long packet_length; enum mysql_status status; mysql_field *fields; mem_root field_alloc; my_bool free_me; /* if free in mysql_close */ my_bool
9、reconnect; /* set to 1 if automatic reconnect */ struct st_mysql_options options; char scramble_buff9; struct charset_info_st *charset; unsigned int server_language; mysql;mysql_res這個(gè)結(jié)構(gòu)代表返回行的一個(gè)查詢的(select, show, describe, explain) 的結(jié)果。 返回的數(shù)據(jù)稱為“數(shù)據(jù)集”,用過(guò)數(shù)據(jù)庫(kù)的朋友應(yīng)該對(duì)數(shù)據(jù)庫(kù)中查詢后得到的結(jié)果集不會(huì)陌生,在 c的 api 里對(duì)應(yīng)的就是mysql_re
10、s了,從數(shù)據(jù)庫(kù)讀取數(shù)據(jù),最后就是從mysql_res中讀取數(shù)據(jù)。typedef struct st_mysql_res my_ulonglong row_count; unsigned int field_count, current_field; mysql_field *fields; mysql_data *data; mysql_rows *data_cursor; mem_root field_alloc; mysql_row row; /* if unbuffered read */ mysql_row current_row; /* buffer to current row *
11、/ unsigned long *lengths; /* column lengths of current row */ mysql *handle; /* for unbuffered reads */ my_bool eof; /* used my mysql_fetch_row */ mysql_res;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é)) 行通過(guò)調(diào)用mysql_fetch_row()獲得。typedef char *my
12、sql_row;mysql_field這個(gè)結(jié)構(gòu)包含字段信息,例如字段名、類型和大小。其成員在下面更詳細(xì)地描述。你可以通過(guò)重復(fù)調(diào)用mysql_fetch_field()對(duì)每一列獲得 mysql_field結(jié)構(gòu)。字段值不是這個(gè)結(jié)構(gòu)的部分;他們被包含在一個(gè)mysql_row結(jié)構(gòu)中。typedef struct st_mysql_field char *name; /* name of column */ char *table; /* table of column if column was a field */ char *def; /* default value (set by mysql_
13、list_fields) */ enum enum_field_types type; /* type of field. se mysql_com.h for types */ unsigned int length; /* width of column */ unsigned int max_length; /* max width of selected set */ unsigned int flags; /* div flags */ unsigned int decimals; /* number of decimals in field */ mysql_field;my_ul
14、onglongtypedef unsigned long my_ulonglong;該類型用于行編號(hào)和mysql_affected_rows ()、mysql_num_rows() 和mysql_insert_id()。這種類型提供0 到 1.84e19 的一個(gè)范圍。在一些系統(tǒng)上,試圖打印類型 my_ulonglong的值將不工作。為了打印出這樣的值,將它變換到unsigned long 并且使用一個(gè) %lu 打印格式。例如:printf (number of rows: %lun, (unsigned long) mysql_num_rows(result);連接 mysql ,查詢數(shù)據(jù)現(xiàn)在
15、假設(shè) mysql 已安裝, 用戶和數(shù)據(jù)表在數(shù)據(jù)庫(kù)被創(chuàng)造。以防有什么不明問(wèn)題的情況, 請(qǐng)參考網(wǎng)站。前面已經(jīng)說(shuō)過(guò),mysql 的庫(kù)文件在mysqlclient。因此在編譯mysql 程序的時(shí)候有必要加上-lmysqlclient編譯選項(xiàng)。 mysql 的頭文件在 /usr/include/mysql目錄下 ( 根據(jù) linux的發(fā)行版本的不同,這個(gè)目錄也有所不同) ,因此你的程序頭部看起來(lái)有點(diǎn)這個(gè)樣子:#include mysql 的變量類型和函數(shù)都包含在這個(gè)頭文件當(dāng)中然后,我們需要?jiǎng)?chuàng)建連接數(shù)據(jù)庫(kù)的變量,可以簡(jiǎn)單地這么做:mysql mysql;在連接數(shù)據(jù)庫(kù)之前,我們要調(diào)用以下函數(shù)初始化這個(gè)變量:
16、mysql_init(&mysql);然后,調(diào)用mysql_real_connect函數(shù):mysql * stdcall 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 clientflag);該函數(shù)被調(diào)用連接到數(shù)據(jù)庫(kù)。 host 是 mysql 服務(wù)器的主機(jī)名, user 是登錄的用戶名, passwd是登錄密碼
17、, db 是要連接的數(shù)據(jù)庫(kù), port 是 mysql 服務(wù)器的 tcp/ip端口, unix_socket是連接類型, clientflag是 mysql 運(yùn)行成 odbc 數(shù)據(jù)庫(kù)的標(biāo)記。在這篇文章當(dāng)中該標(biāo)記設(shè)成0,連接尋建立后,這個(gè)函數(shù)返回0?,F(xiàn)在可以連接數(shù)據(jù)庫(kù),進(jìn)行查詢了:char *query;使用這個(gè)字符串我們可以創(chuàng)立任何sql查詢語(yǔ)句進(jìn)行查詢。執(zhí)行這個(gè)查詢的函數(shù)是:int stdcall mysql_real_query(mysql *mysql, const char *q, unsigned int length);mysql 是我們前面用過(guò)的變量,q是 sql查詢語(yǔ)句, le
18、ngth 是這個(gè)查詢語(yǔ)句的長(zhǎng)度。如果查詢成功,函數(shù)返回0。查詢之后,我們要到一個(gè)mysql_res 變量來(lái)使用查詢的結(jié)果。以下這行創(chuàng)立這個(gè)變量:mysql_res *res;然后res = mysql_store_result(&mysql);對(duì)客戶端而言,有兩種方法處理結(jié)果集合。一種方法是通過(guò)調(diào)用mysql_store_result ()立刻檢索全部結(jié)果。該函數(shù)從服務(wù)器獲得查詢返回的所有行,并將他們存儲(chǔ)在客戶端。 第二種方法是對(duì)客戶通過(guò)調(diào)用mysql_use_result()初始化一個(gè)一行一行地結(jié)果集合的檢索。該函數(shù)初始化檢索,但是實(shí)際上不從服務(wù)器獲得任何行。在兩種情況中,你通過(guò)my
19、sql_fetch_row ()存取行。用 mysql_store_result()、mysql_fetch_row()儲(chǔ)存取已經(jīng)從服務(wù)器被取出的行。 用 mysql_use_result()、 mysql_fetch_row()實(shí)際上從服務(wù)器檢索行。 調(diào)用 mysql_fetch_lengths()可獲得關(guān)于每行中數(shù)據(jù)值尺寸的信息。在你用完一個(gè)結(jié)果集合以后,調(diào)用mysql_free_result()釋放由它使用的內(nèi)存。兩種檢索機(jī)制是互補(bǔ)的??蛻舫绦驊?yīng)該選擇最適合他們的要求的途徑。在實(shí)踐中,客戶通常更愿意使用mysql_store_result()。該函數(shù)讀出查詢結(jié)果。盡管可以很容易地查詢了,
20、要用這個(gè)查詢的結(jié)果還要用到其它的函數(shù)。第一個(gè)是:mysql_row stdcall mysql_fetch_row(mysql_res *result);該函數(shù)把結(jié)果轉(zhuǎn)換成 “ 數(shù)組” 。你可能注意到了,該函數(shù)返回的是mysql_row變量類型。以下語(yǔ)句創(chuàng)立那樣的變量:mysql_row row = mysql_fetch_row(res)如前所解釋的,變量row 是一個(gè)字符串?dāng)?shù)組。也就是說(shuō),row0是數(shù)組的第一個(gè)值, row1是數(shù)組的第二個(gè)值 .當(dāng)我們用 mysql_fetch_row的時(shí)候,接著變量row 會(huì)取得結(jié)果的下一組的數(shù)據(jù)。當(dāng)?shù)搅私Y(jié)果的尾部,該函數(shù)返回一負(fù)值。使用 數(shù)據(jù)集結(jié)束后,記
21、得釋放數(shù)據(jù)集,否則會(huì)發(fā)生內(nèi)存泄漏,釋放數(shù)據(jù)集函數(shù)如下:void mysql_free_result(mysql_res *result)釋放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等為一個(gè)結(jié)果集合分配的內(nèi)存。當(dāng)你用完了一個(gè)結(jié)果集合時(shí),你必須調(diào)用mysql_free_result()來(lái)釋放它使用的內(nèi)存。最后我們要關(guān)閉這個(gè)連接:mysql_close(&mysql);例子程序執(zhí)行一個(gè) select操作, 從數(shù)據(jù)庫(kù)中取數(shù)據(jù),并執(zhí)行一個(gè)insert操作, 往數(shù)據(jù)庫(kù)中插入數(shù)據(jù),根據(jù)這兩個(gè)操作你可以自由的擴(kuò)展為任意數(shù)據(jù)庫(kù)操作
22、,準(zhǔn)備條件1、已經(jīng)安裝mysql,上有數(shù)據(jù)庫(kù)test ,如果沒(méi)有執(zhí)行create databse test建立數(shù)據(jù)庫(kù)2、test數(shù)據(jù)庫(kù)上有表t1 ,如果沒(méi)有,執(zhí)行create table t1 ( id int(11) default null, name varchar(100) default null )建立表 t1testsql.c:/* testsql.c * an example to use mysql c api* copyright 2004 coon xu.* author: coon xu* date: 05 nov 2004 */#include #include in
23、t main() mysql mysql; / need a instance to init mysql_res *res; mysql_row row; char *query; int t,r; / connect the database mysql_init(&mysql); if (!mysql_real_connect(&mysql,localhost, mmim, mmim, test,0,null,0) printf( error connecting to database: %sn,mysql_error(&mysql); else printf(connected.n); / get the result from the executing select query query = select * from t1; t = mysql_real_query(&m
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生氣情緒幼兒活動(dòng)方案
- 牡丹節(jié)推廣活動(dòng)方案
- 琵琶公司年會(huì)策劃方案
- 獵頭公司推廣策劃方案
- 珠寶年終活動(dòng)方案
- 物業(yè)少兒活動(dòng)策劃方案
- 愛(ài)兒親子教育活動(dòng)方案
- 珠寶金店活動(dòng)方案
- 珠寶公關(guān)策劃活動(dòng)方案
- 環(huán)保循環(huán)活動(dòng)方案
- GB/T 8685-2008紡織品維護(hù)標(biāo)簽規(guī)范符號(hào)法
- 網(wǎng)電部管理重點(diǎn)(中)
- 醫(yī)療器械行業(yè)市場(chǎng)部人員崗位職責(zé)
- 旅行社導(dǎo)游帶團(tuán)操作流程
- 部編版小學(xué)道德與法治三年級(jí)下冊(cè)期末質(zhì)量檢測(cè)試卷【含答案】5套
- 怎樣當(dāng)好一名師長(zhǎng)
- DB21T 3354-2020 遼寧省綠色建筑設(shè)計(jì)標(biāo)準(zhǔn)
- 新生兒復(fù)蘇解析課件
- (完整版)重大危險(xiǎn)源清單及辨識(shí)表
- ABI7500熒光定量PCR儀標(biāo)準(zhǔn)操作規(guī)程
- 語(yǔ)言領(lǐng)域核心經(jīng)驗(yàn)《學(xué)前兒童語(yǔ)言學(xué)習(xí)與發(fā)展核心經(jīng)驗(yàn)》
評(píng)論
0/150
提交評(píng)論