亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

MySQL的C語言API接口

2020-01-26 14:57:04
字體:
來源:轉載
供稿:網友

1、首先當然是連接數據庫,函數原型如下:

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 long clientflag);

第一個參數 MYSQL是 C api中一個非常重要的變量,里面內存非常豐富,有port,dbname,charset等連接基本參數。它也包含了一個叫 st_mysql_methods的結構體變量,該變量里面保存著很多函數指針,這些函數指針將會在數據庫連接成功以后的各種數據操作中被調用。mysql_real_connect函數中各參數,基本都是顧名思意。

2、連接數據庫成功之后就可以執行sql語句了使用mysql_query
int STDCALL mysql_query(MYSQL *mysql, const char *q);

第一個參數上面已經介紹過,第二個參數為要執行的sql語句。

這個函數總體就兩步:

(1)發送sql語句,其實就一個socket發送sql 語句,加上mysql固定的協議頭。懶的去看源碼了,抓了下包,如下:
0000 19 00 00 00 0373 65 6c 65 63 74 20 61 70 70 5f .....select app_
0010 6e 61 6d 65 20 66 72 6f 6d 20 61 70 70 name from app
紅色部分是協議,前面兩位其實就是包的長度。具體協議沒研究過。

(2)然后就是接受結果,這里將會調用MYSQL變量中的st_mysql_methods中的read_query_result函數指針

3、獲取結果

sql執行完以后,如果是查詢語句,我們當然還要讀取數據,如果update,insert等語句,那么就看下操作成功與否即可。我們來看看如何獲取查詢結果: 如果mysql_query返回成功,那么我們就通過mysql_store_result這個函數來讀取結果。原型如下:

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);

該函數會調用MYSQL變量中的st_mysql_methods中的 read_rows函數指針來獲取查詢的結果。同時該函數會返回MYSQL_RES 這樣一個變量,該變量主要用于保存查詢的結果。同時該函數malloc了一片內存空間來存儲查詢過來的數據,所以我們一定要記的 free(result),不然是肯定會造成內存泄漏的。 執行完mysql_store_result以后,其實數據都已經在MYSQL_RES 變量中了,下面的api基本就是讀取MYSQL_RES 中的數據。例如mysql_fetch_row這個函數,就是讀去查詢結果的一行。函數原型如下

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

它會返回一個MYSQL_ROW變量,MYSQL_ROW其實就是char **.就當成一個二維數組來用吧。還有很多api,不再一一介紹,大部分信息都在MYSQL_RES MYSQL這兩個結構體中。具體可以參考mysql官方網站: http://dev.mysql.com/doc/refman/5.1/en/c.html 突然發現官方網站資料好全面,貌似比任何書都要好。

下面來個例子:

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<mysql/mysql.h>#define MAX_COLUMN_LEN  32int main(int argc , char *argv[]){  MYSQL my_connection;  MYSQL_RES *result;  MYSQL_ROW sql_row;  MYSQL_FIELD *fd;  char column[MAX_COLUMN_LEN][MAX_COLUMN_LEN];  int res;  mysql_init(&my_connection);  if(mysql_real_connect(&my_connection,"127.0.0.1","用戶","密碼","數據名稱",3306,NULL,0))  {    perror("connect");    res=mysql_query(&my_connection,"select * from app");//查詢    if(!res)    {      result=mysql_store_result(&my_connection);//保存查詢到的數據到result      if(result)      {        int i,j;        printf("the result number is %lu/n ",(unsigned long)mysql_num_rows(result));        for(i=0;fd=mysql_fetch_field(result);i++)//獲取列名        {          bzero(column[i],sizeof(column[i]));          strcpy(column[i],fd->name);        }        j=mysql_num_fields(result);        for(i=0;i<j;i++)        {          printf("%s/t",column[i]);        }        printf("/n");        while(sql_row=mysql_fetch_row(result))//獲取具體的數據        {          for(i=0;i<j;i++)          {            printf("%s/t",sql_row[i]);          }          printf("/n");        }              }    }    else    {      perror("select");    }  }  else  {    perror("connect:error");  }  mysql_free_result(MYSQL_RES *result);//釋放結果資源  mysql_close(&my_connection);//斷開連接}

上面這個例子就是從一個表中查數據,然后輸出。 如果要insert或者update,只需要修改具體的sql既可。具體的操作都是通過mysql_query這個函數來搞定。 現在來講編譯的方法吧,這里我們需要.h以及.so庫。我們可以在 http://dev.mysql.com/downloads/connector/c/6.0.html 下載Connector/C。簡單的方法就是: 把里面include的東西拷貝到/usr/include/mysql/下面去,這樣編譯的時候就不需要加-I了,然后把lib下面的東西拷貝的/usr/lib/下去。

gcc具體的編譯方法:gcc ***.c -o *** -lmysqlclient

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品香蕉在线观看| 久久久久久久999| 久久99久久99精品中文字幕| 欧美性在线观看| 欧美精品videossex性护士| 亚洲国产精久久久久久久| 91在线观看免费观看| 国产亚洲精品日韩| 九九热最新视频//这里只有精品| 国产日韩在线观看av| 57pao国产精品一区| 色系列之999| 色一情一乱一区二区| 日韩中文在线不卡| 亚洲图片在线综合| 日韩中文字幕免费视频| 麻豆乱码国产一区二区三区| 欧美日韩电影在线观看| 欧美电影免费观看| 亚洲成人国产精品| 国产精品都在这里| 欧美激情视频一区| 伊人久久久久久久久久久久久| 日韩电影免费观看在线| 综合av色偷偷网| 国产在线a不卡| 青青精品视频播放| 色综合91久久精品中文字幕| 欧美亚洲日本黄色| 日韩av中文字幕在线| 高清欧美电影在线| 91天堂在线观看| 午夜精品99久久免费| 91欧美精品午夜性色福利在线| 国产91对白在线播放| 久久亚洲国产精品成人av秋霞| 亚洲а∨天堂久久精品9966| 欧美日韩亚洲视频| 欧美极品少妇全裸体| 日韩免费av在线| 97色伦亚洲国产| 国产日产欧美a一级在线| 综合欧美国产视频二区| 综合136福利视频在线| 久久久在线免费观看| 在线国产精品视频| 亚洲精品日韩av| 91在线视频免费| 国产视频精品va久久久久久| 2021久久精品国产99国产精品| 久久夜色精品亚洲噜噜国产mv| 欧美性20hd另类| 亚洲а∨天堂久久精品喷水| 亚洲欧美中文日韩在线v日本| 伊人伊成久久人综合网小说| 丁香五六月婷婷久久激情| 欧美成年人在线观看| 亚洲欧美日韩另类| 国产91久久婷婷一区二区| 中文字幕亚洲一区二区三区| 丝袜情趣国产精品| 国产日韩在线亚洲字幕中文| 成人午夜黄色影院| 国产精品96久久久久久| 国产精品com| 亚洲激情中文字幕| 欧美国产精品人人做人人爱| 久久久天堂国产精品女人| 日韩在线视频网站| 久久精品中文字幕| 欧美视频精品一区| 日韩电影中文字幕av| 欧美资源在线观看| 欧美成人精品一区二区| 亚洲美女动态图120秒| 久久国产精品久久久| 亚洲人成在线电影| 久久久久亚洲精品国产| 日韩电影免费在线观看中文字幕| 国产91精品青草社区| 中文字幕亚洲一区二区三区| 欧洲成人免费aa| 欧美激情精品久久久久久蜜臀| 91热福利电影| 亚洲欧美日韩另类| 亚洲第一偷拍网| 国产区亚洲区欧美区| 久久精品亚洲热| 国产精品三级在线| 国产一区红桃视频| 日韩女在线观看| 丁香五六月婷婷久久激情| 国产精品视频网| 性色av一区二区三区| 91探花福利精品国产自产在线| 日韩小视频网址| 日韩一区二区福利| 亚洲欧美精品在线| 精品国产乱码久久久久久婷婷| 欧美在线视频一二三| 国产成人精品免费视频| 黄色一区二区三区| 日韩美女免费视频| 成人免费视频在线观看超级碰| 欧美激情中文字幕乱码免费| 78m国产成人精品视频| 91久久久国产精品| 国模精品视频一区二区三区| 久久久人成影片一区二区三区观看| 欧美日韩免费网站| 久久国产精彩视频| 国产精品第一页在线| 日韩欧美在线免费观看| 亚洲国产美女久久久久| 日韩av免费在线看| 91系列在线播放| 亚洲精品福利在线| 欧美黑人xxx| 欧美一二三视频| 国产精品视频久久| 欧美在线性爱视频| 国产精品三级网站| 国产一区在线播放| 欧美精品在线免费播放| 国内精品视频一区| 久久久亚洲网站| 亚洲性无码av在线| 91夜夜未满十八勿入爽爽影院| 国产精品久久久久久久app| 中文字幕日韩精品在线| 欧美激情第99页| xvideos成人免费中文版| 久久在线精品视频| 久久好看免费视频| 亚洲色在线视频| 自拍偷拍亚洲一区| 日韩精品免费观看| 欧美成人合集magnet| 久久久久久久久久久免费精品| 欧美大尺度激情区在线播放| 91欧美精品成人综合在线观看| 欧美在线xxx| 国产精品久久久久秋霞鲁丝| 亚洲精品久久久久中文字幕欢迎你| 在线观看视频99| 国产欧美日韩亚洲精品| 国产日韩欧美日韩大片| 自拍偷拍亚洲精品| 欧美午夜性色大片在线观看| 欧美激情一级二级| 26uuu另类亚洲欧美日本一| 夜夜嗨av一区二区三区四区| 91久久精品国产91久久| 日韩精品在线观看一区二区| 久久免费成人精品视频| 日韩在线精品一区| 亚洲成人精品在线| 午夜欧美不卡精品aaaaa| 久久97久久97精品免视看| 欧美精品中文字幕一区| 久久久久久18| 91po在线观看91精品国产性色| 亚洲欧美成人一区二区在线电影| 亚洲a在线观看|