欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

用C語言操縱Mysql

系統(tǒng) 2002 0

以下代碼塊是用來連接數(shù)據(jù)庫的通訊過程,要連接MYSQL,必須建立MYSQL實例,通過mysql_init初始化方能開始進行連接.

    
      typedef struct st_mysql {
    
  
    
       NET           net;            /* Communication parameters */
    
  
    
       gptr          connector_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 server */
    
  
    
       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       reconnect;      /* set to 1 if automatic reconnect */
    
  
    
       struct st_mysql_options options;
    
  
    
       char          scramble_buff[9];
    
  
    
       struct charset_info_st *charset;
    
  
    
       unsigned int server_language;
    
  
    
      } MYSQL;
    
  

這個結(jié)構(gòu)代表返回行的一個查詢的( SELECT , SHOW , DESCRIBE , EXPLAIN )的結(jié)果。返回的數(shù)據(jù)稱為“數(shù)據(jù)集”,用過數(shù)據(jù)庫的朋友應該對數(shù)據(jù)庫中查詢后得到的結(jié)果集不會陌生,在C的API里對應的就是MYSQL_RES了,從數(shù)據(jù)庫讀取數(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 */
    
  
    
       unsigned long *lengths;       /* column lengths of current row */
    
  
    
       MYSQL         *handle;        /* for unbuffered reads */
    
  
    
       my_bool       eof;            /* Used my mysql_fetch_row */
    
  
    
      } MYSQL_RES;
    
  

?

----------------------------------------------

再看函數(shù):

?

C語言操作mysql數(shù)據(jù) 常用函數(shù)

所需頭文件: #include <mysql/mysql.h> 功能:? 獲得或初始化一個MYSQL結(jié)構(gòu) 函數(shù)原型: MYSQL *mysql_init(MYSQL *mysql) 函數(shù)返回值: 一個被始化的MYSQL*句柄 備注:? 在內(nèi)存不足的情況下,返回NULL

所需頭文件: #include <mysql/mysql.h> 函數(shù)功能: 關閉一個服務器連接,并釋放與連接相關的內(nèi)存 函數(shù)原型: void mysql_close(MYSQL *mysql); 函數(shù)傳入值: MYSQL:類型的指針 函數(shù)返回值: 無

所需頭文件: #include <mysql/mysql.h> 函數(shù)功能: 連接一個MySQL服務器 函數(shù)原型: MYSQL * mysql_connect(MYSQL *mysql,const char *host,const char *user,const char *passwd); 函數(shù)傳入值: mysql表示一個現(xiàn)存mysql結(jié)構(gòu)的地址 ? host表示MYSQL服務器的主機名或IP ? user表示登錄的用戶名 ? passwd表示登錄的密碼 函數(shù)返回值: 如果連接成功,一個MYSQL *連接句柄:如果連接失敗,NULL 備注:? 該函數(shù)不推薦,使用mysql_real_connect()代替

所需文件: #include <mysql/mysql.h> 函數(shù)功能: 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); 函數(shù)傳入值: mysql表示一個現(xiàn)存mysql結(jié)構(gòu)的地址 ? host表示MYSQL服務器的主機名或IP ? user表示登錄的用戶名 ? passwd表示登錄的密碼 ? db表示要連接的數(shù)據(jù)庫 ? port表示MySQL服務器的TCP/IP端口 ? unix_socket表示連接類型 ? client_flag表示MySQL運行ODBC數(shù)據(jù)庫的標記 函數(shù)返回值: 如果連接成功,一個MYSQL*連接句柄:如果連接失敗,NULL

所需頭文件: #include <mysql/mysql.h> 函數(shù)功能: 返回最新的UPDATE,DELETE或INSERT查詢影響的行數(shù) 函數(shù)傳入值: MYSQL:類型指針 函數(shù)返回值: 大于零的一個整數(shù)表示受到影響或檢索出來的行數(shù)。零表示沒有區(qū)配查序中WHERE子句的記錄或目前還沒有查詢被執(zhí)行;-1表示查詢返回一個錯誤,或?qū)τ谝粋€SELECT查詢

所需頭文件: #include <mysql/mysql.h> 函數(shù)功能: 對指定的連接執(zhí)行查詢 函數(shù)原型: int mysql_query(MYSQL *mysql,const char *query); 函數(shù)傳入值: query表示執(zhí)行的SQL語句 函數(shù)返回值: 如果查詢成功,為零,出錯為非零。 相關函數(shù): mysql_real_query

所需頭文件: #include <mysql/mysql.h> 函數(shù)功能: 為無緩沖的結(jié)果集獲得結(jié)果標識符 函數(shù)原形: MYSQL_RES *mysql_use_result(MYSQL *mysql); 函數(shù)傳入值: MYSQL:類型的指針 函數(shù)返回值: 一個MYSQL_RES結(jié)果結(jié)構(gòu),如果發(fā)生一個錯誤發(fā)NULL

#incluee <mysql/mysql.h> 檢索一個結(jié)果集合的下一行 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); MYSQL_RES:結(jié)構(gòu)的指針 下一行的一個MYSQL_ROW結(jié)構(gòu)。如果沒有更多的行可檢索或如果出現(xiàn)一個錯誤,NULL

#include <mysql/mysql.h> 返回指定結(jié)果集中列的數(shù)量 unsigned int mysql_num_fields(MYSQL_RES *res); MYSQL_RES 結(jié)構(gòu)的指針 結(jié)果集合中字段數(shù)量的一個無符號整數(shù)

#include <mysql/mysql.h> 創(chuàng)建一個數(shù)據(jù)庫 int mysql_create_db(MYSQL *mysql,const char *db); MYSQL:類型的指針 db:要創(chuàng)建的數(shù)據(jù)庫名 如果數(shù)據(jù)庫成功地被創(chuàng)建,返回零,如果發(fā)生錯誤,為非零。

#include <mysql/mysql.h> 選擇一個數(shù)據(jù)庫 int mysql_select_db(MYSQL *mysql,const char *db); MYSQL:類型的指針 db:要創(chuàng)建的數(shù)據(jù)庫名 如果數(shù)據(jù)庫成功地被創(chuàng)建,返回零,如果發(fā)生錯誤,為非零。

?

----------------------------------------------

再看例子:

????? 很多人用到MySQL來開發(fā)一些項目,有時為了性能,我們會直接用C語言來開發(fā)相關的模塊,尤其在我們的web應用中,雖然PHP、JSP等腳本均 提供了MySQL的接口,但是顯然直接使用C語言具有更好的安全性和性能,Michael以前用PHP開發(fā)的多個項目中就使用了C語言編寫的這類接口,然 后再編譯到php里面,供php腳本直接使用,這方面的話題就不多說了,下面主要說一下在Linux下如何用C語言連接MySQL數(shù)據(jù)庫,并且讀取里面的 數(shù)據(jù)返回,同時如何進行編譯。

  這里的大部分代碼參考了MySQL發(fā)行包里面的.c源文件,大家也可以去里面找找相關的代碼,下面這段代碼實現(xiàn)了連接到本地MySQL服務器上9tmd_bbs_utf8數(shù)據(jù)庫,從數(shù)據(jù)表tbb_user中根據(jù)輸入的userid取得該用戶的用戶名并打印輸出到終端。

#if defined ( _WIN32 ) || defined ( _WIN64 ) //為了支持windows平臺上的編譯 #include < windows.h > #endif#include < stdio.h > #include < stdlib.h > #include " mysql.h " ? //我的機器上該文件在/usr/local/include/mysql下 //定義數(shù)據(jù)庫操作的宏,也可以不定義留著后面直接寫進代碼 #define SELECT_QUERY " select username from tbb_user where userid = %d " int main ( int argc , char ** argv ) //char **argv 相當于 char *argv[] { ??? MYSQL mysql ,* sock ;??? //定義數(shù)據(jù)庫連接的句柄,它被用于幾乎所有的MySQL函數(shù) ??? MYSQL_RES * res ;?????? //查詢結(jié)果集,結(jié)構(gòu)類型 ??? MYSQL_FIELD * fd ;???? //包含字段信息的結(jié)構(gòu) ??? MYSQL_ROW row ;?????? //存放一行查詢結(jié)果的字符串數(shù)組 ??? char qbuf [ 160 ] ;????? //存放查詢sql語句字符串 ??? ??? if ( argc != 2 ) { //檢查輸入?yún)?shù) ??????? fprintf ( stderr , " usage : mysql_select <userid> \ n \ n " ) ; ??????? exit ( 1 ) ; ??? } ??? ??? mysql_init ( & mysql ) ; ??? if ( ! ( sock = mysql_real_connect ( & mysql , " localhost " , " dbuser " , " dbpwd " , " 9tmd_bbs_utf8 " , 0 , NULL , 0 ))) { ??????? fprintf ( stderr , " Couldn't connect to engine! \ n%s \ n \ n " , mysql_error ( & mysql )) ; ??????? perror ( "" ) ; ??????? exit ( 1 ) ; ??? } ??? ??? sprintf ( qbuf , SELECT_QUERY , atoi ( argv [ 1 ])) ; ??? if ( mysql_query ( sock , qbuf )) { ??????? fprintf ( stderr , " Query failed (%s) \ n " , mysql_error ( sock )) ; ??????? exit ( 1 ) ; ??? } ??? ??? if ( ! ( res = mysql_store_result ( sock ))) { ??????? fprintf ( stderr , " Couldn't get result from %s \ n " , mysql_error ( sock )) ; ??????? exit ( 1 ) ; ??? } ??? ??? printf ( " number of fields returned: %d \ n " , mysql_num_fields ( res )) ; ??????? ??? while ( row = mysql_fetch_row ( res )) { ??????? printf ( " Ther userid #%d 's username is: %s \ n " , atoi ( argv [ 1 ]) , ((( row [ 0 ] == NULL ) && ( ! strlen ( row [ 0 ]))) ? " NULL " : row [ 0 ])) ; ??????? puts ( " query ok ! \ n " ) ; ??? } ??? ??? mysql_free_result ( res ) ; ??? mysql_close ( sock ) ; ??? exit ( 0 ) ; ??? return 0 ;?? //. 為了兼容大部分的編譯器加入此行 }

編譯的時候,使用下面的命令

gcc -o mysql_select? ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql? -lmysqlclient (-lz) (-lm) 后面兩個選項可選,根據(jù)您的環(huán)境情況

運行的時候,執(zhí)行下面的命令

./mysql_select 1

將返回如下結(jié)果:

number of fields returned: 1 Ther userid #1 's username is: Michael query ok !

上面的代碼我想大部分都能看明白,不明白的可以參考一下MySQL提供的有關C語言API部分文檔,各個函數(shù)都有詳細說明,有時間我整理一份常用的API說明出來。

用C語言操縱Mysql


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本女人毛茸茸 | 免费看欧美成人性色生活片 | 天天夜夜操 | 久久这里只有精品国产99 | 亚洲国产成人av好男人在线观看 | 欧美一区二区三区在线观看视频 | 日本国产成人精品视频 | 国产精品欧美日韩 | 久操中文在线 | 激情91| 亚洲精品久久久久无码AV片软件 | 青娱乐精品视频在线观看 | 黄色一级视频欧美 | 激情五月色综合色婷婷 | 免费福利视频在线观看 | 99视频在线观看精品 | 日韩在线观看你懂的 | 日本精品a在线观看 | 日韩欧美一区二区三区视频 | 久草视频在线资源 | av在线播放网址 | 欧美日韩亚洲人人夜夜澡 | 天天干天天插天天操 | 久草网在线观看 | 成人国产精品免费视频不卡 | 性欧美激情在线观看 | 天天拍夜夜添久久精品中文 | 激情五月在线 | jizz日本女人| 精品国产第一国产综合精品gif | 亚洲国产aⅴ成人精品无吗 国内成人自拍视频 | 精品视频免费观看 | 国产一级性生活视频 | 波多野结衣中文在线播放 | 国产精品亚欧美一区二区三区 | 国产一三区A片在线播放 | 久久精彩视频 | 久久宗合色 | 欧美3级| 欧美一区二区三区大片 | 欧美成人精品二区三区99精品 |