c語言操作mysql資料庫

來源:互聯網
上載者:User

標籤:使用者名稱   tle   主機   mysql資料庫   傳回值   explain   調用   連接埠   win   

  c語言操作Mysql資料庫,主要就是為了實現對資料庫的增、刪、改、查等操作,操作之前,得先串連資料庫啊,而串連資料庫主要有兩種方法。一、使用mysql本身提供的API,在mysql的安裝目錄中可可以看到大量的標頭檔、lib檔案、dll檔案,這說明mysql原生就支援了c語言,操作起來相當簡單。二、使用win32 api(這裡只探討windows平台),主要是ODBC。

  ODBC API 介面是(Open Database Connectivity)開放式資料庫介面,它建立了一組規範,並提供了一組對資料庫訪問的標準API,這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支援,使用者可以直接將SQL語句送給ODBC。這個基於ODBC的應用程式對資料庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的資料庫操作由對應的DBMS的ODBC驅動程式完成。也就是說,不論是FoxPro、Access還是Oracle資料庫,均可用ODBC API進行訪問。由此可見,ODBC的最大優點是能以統一的方式處理所有的資料庫。

  這裡先從第一種方法開始,先認識基本的幾個api函數。

  1  MYSQL *mysql_init(MYSQL *mysql)  

    功能: 分配或初始化MYSQL對象。

    參數:mysql  

    待初始化的MYSQ對象,將對象地址傳入,NULL指標,該函數將分配、初始化、並返回新對象。否則,將初始化對象,並返回對象的地址。

    用法執行個體:

    MYSQL  mysql;

    mysql_init(&mysql); // 或者 mysql = mysql_init(NULL);

  2  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 long client_flag)

    功能:嘗試與運行在主機上的MySQL資料庫引擎建立串連,這個函數參數很多啊。看名字就可以是什麼意思了

    參數:mysql 前面一個函數的返回的mysql執行個體控制代碼。host 要串連的資料庫的主機,可以是ip地址或主機名稱。user 表示登入資料庫的使用者名稱

passwd 登入的密碼。db 就是訪問的資料庫。port mysql的tcp/ip連接埠預設是3306.unix_socket 表示連線類型。client_flag 暫時為0即可。

  3  int mysql_query(MYSQL *mysql,const char *query)

     功能:根據query查詢語句執行查詢資料庫

     參數: mysql mysql的執行個體。query 查詢語句字串

    傳回值: 成功返回0,失敗返回非0

  4  MYSQL_RES *mysql_store_result(MYSQL *mysql)

    功能:得到查詢的結果集,對於成功檢索了資料的每個查詢(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必須調用mysql_store_result()或mysql_use_result() 

    參數:mysql前面的mysql執行個體

    傳回值:成功返回MYSQL_RES結構體,該結構體中儲存查詢的結果

  5  MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

    功能:mysql_store_result得到的結果結構中提取一行,並把它放到一個行結構中。

    傳回值:下一行的一個MYSQL_ROW結構當資料用完或發生錯誤時返回null

 

 

下面是簡單一實例代碼

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>
#include "C:\Program Files\MySQL\MySQL Server 5.7\include\mysql.h" //包含MySQL所需要的標頭檔
#pragma comment(lib, "libmysql.lib")

int main(void)
{
  MYSQL mysql, *sock; //聲明MySQL的控制代碼
  const char * host = "127.0.0.1"; //因為是作為本機測試,所以填寫的是本地IP
  const char * user = "root"; //這裡改為你的使用者名稱,即串連MySQL的使用者名稱
  const char * passwd = "root"; //這裡改為你的使用者密碼
  const char * db = "test"; //這裡改為你要串連的資料庫的名字,一個資料可能有幾張表
  unsigned int port = 3306; //這是MySQL的伺服器的連接埠,如果你沒有修改過的話就是3306。
  const char * unix_socket = NULL; //unix_socket這是unix下的,我在Windows下,所以就把它設定為NULL
  unsigned long client_flag = 0; //這個參數一般為0

  const char * i_query = "select * from person"; //查詢語句,從那個表中查詢,這裡後面沒有;

  MYSQL_RES * result; //儲存結果集的
  MYSQL_ROW row; //代表的是結果集中的一行

  //my_ulonglong row;

  mysql_init(&mysql); //串連之前必須使用這個函數來初始化
  if ( (sock = mysql_real_connect(&mysql, host, user, passwd, db, port, unix_socket, client_flag) ) == NULL ) //串連MySQL
  {
    printf("fail to connect mysql \n");
    fprintf(stderr, " %s\n", mysql_error(&mysql));
    exit(1);
  }
  else
  {
    fprintf(stderr, "connect ok!!\n");
  }

  if ( mysql_query(&mysql, i_query) != 0 ) //如果串連成功,則開始查詢 .成功返回0
  {
    fprintf(stderr, "fail to query!\n");
    exit(1);
  }
  else
  {
    if ( (result = mysql_store_result(&mysql)) == NULL ) //儲存查詢的結果
    {
      fprintf(stderr, "fail to store result!\n");
      exit(1);
    }
    else
    {
        while ( (row = mysql_fetch_row(result)) != NULL ) //讀取結果集中的資料,返回的是下一行。因為儲存結果集時,當前的遊標在第一行【之前】
        {
          printf("name is %s\t", row[0]); //列印當前行的第一列的資料
          printf("age is %s\t\n", row[1]); //列印當前行的第二列的資料

          //row = mysql_num_row(result);
          //printf("%lu\n", mysql_num_row(result));
        }
    }

  }

  mysql_free_result(result); //釋放結果集
  mysql_close(sock); //關閉串連
  system("pause");
  exit(EXIT_SUCCESS);

}

 

c語言操作mysql資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.