日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

用C語言操縱Mysql

系統 2084 0

以下代碼塊是用來連接數據庫的通訊過程,要連接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;
    
  

這個結構代表返回行的一個查詢的( SELECT , SHOW , DESCRIBE , EXPLAIN )的結果。返回的數據稱為“數據集”,用過數據庫的朋友應該對數據庫中查詢后得到的結果集不會陌生,在C的API里對應的就是MYSQL_RES了,從數據庫讀取數據,最后就是從MYSQL_RES中讀取數據。

    
      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;
    
  

?

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

再看函數:

?

C語言操作mysql數據 常用函數

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

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

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

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

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

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

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

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

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

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

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

?

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

再看例子:

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

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

#if defined ( _WIN32 ) || defined ( _WIN64 ) //為了支持windows平臺上的編譯 #include < windows.h > #endif#include < stdio.h > #include < stdlib.h > #include " mysql.h " ? //我的機器上該文件在/usr/local/include/mysql下 //定義數據庫操作的宏,也可以不定義留著后面直接寫進代碼 #define SELECT_QUERY " select username from tbb_user where userid = %d " int main ( int argc , char ** argv ) //char **argv 相當于 char *argv[] { ??? MYSQL mysql ,* sock ;??? //定義數據庫連接的句柄,它被用于幾乎所有的MySQL函數 ??? MYSQL_RES * res ;?????? //查詢結果集,結構類型 ??? MYSQL_FIELD * fd ;???? //包含字段信息的結構 ??? MYSQL_ROW row ;?????? //存放一行查詢結果的字符串數組 ??? char qbuf [ 160 ] ;????? //存放查詢sql語句字符串 ??? ??? if ( argc != 2 ) { //檢查輸入參數 ??????? 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) 后面兩個選項可選,根據您的環境情況

運行的時候,執行下面的命令

./mysql_select 1

將返回如下結果:

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

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

用C語言操縱Mysql


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 遵义市| 石狮市| 莒南县| 满洲里市| 普定县| 吉木乃县| 应用必备| 新平| 精河县| 措美县| 田阳县| 康定县| 分宜县| 灵台县| 澳门| 四会市| 安阳市| 广西| 全州县| 航空| 界首市| 延庆县| 泰宁县| 民县| 安化县| 开封市| 高邮市| 旺苍县| 安阳市| 安达市| 修水县| 巴东县| 虎林市| 兰西县| 亚东县| 宁远县| 长白| 肥城市| 乌海市| 吴堡县| 河池市|