MySQL入門之常用C語言API

轉自:http://blog.csdn.net/qq920020796/article/details/49250369

數據類型

  • MYSQL
    • 該結構代表1個數據庫連接的句柄。幾乎所有的MYSQL函數均使用它。
  • MYSQL_RES
    • 該結構代表返回行的查詢結果
  • MYSQL_ROW
    • 這是1行數據的"類型安全"表示。
  • MYSQL_FIELD
    • 該結構包 含關 於字段的信息,如字段名、類型和大小等
  • MYSQL_FIELD_OFFSET
    • 這時MYSQL字段列表偏移量的"類型安全"表示
  • my_ulonglong
    • 用於行數以及mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()的類型

 

編程步驟

  • 1 通過調用mysql_library_init(),初始化MYSQL庫
  • 2 通過調用mysql_init()初始化連接處理程序,並通過調用mysql_real_connect()連接到服務器
  • 3 發出SQL語句並處理其結果
  • 4 通過調用mysql_close(),關閉與MYSQL服務器的連接
  • 5 通過調用mysql_library_end(),結束MYSQL庫的使用

數據庫連接

  • 初始化一個連接句柄結構

#include <MySQL.h>

MYSQL *mysql_init(MYSQL *);

  • 和數據庫建立物理連接

MYSQL *mysql_real_connect(MYSQL *connection,

const char *server_host,const char *sql_user_name,

const char *sql_password,const char *db_name,

unsigned int port_number,const char

*unix_socket_name,unsigned int flags);

連接參數

Int mysql_options(MYSQL *connection,enum

option_to_set,const char *argument)

 

 

錯誤處理

  • unsigned int mysql_errno(MYSQL *connection);

對於由mysql指定的連接,該函數返回最近調用的API函數的錯誤代碼,該函數調用可能成功也可能失敗。"0"返回值表示未出現錯誤

  • char *mysql_error(MYSQL *connection)

如果想獲得錯誤的文本信息,可以調用該函數

 

執行SQL語句

  • int mysql_query(MYSQL *mysql,const char *query)
  • 功能描述:
    • 執行由"Null終結的字符串"查詢指向的SQL查詢。正常情況下,字符串必須包含1條SQL語句,而且不應爲語句添加終結分號或"\g"
    • 不能用於包含二進制數據的查詢,應使用mysql_real_query來完成

對於操縱語句

  • My_ulonglong mysql_affected_rows(MYSQL *mysql)

返回上次操縱語句所涉及到記錄的行數

  • 對於UPDATE、DELETE或INSERT語句,可在mysql_query()後立刻調用。對於SELECT語句,該函數的工作方式與mysql_num_rows()類似

對於查詢語言

  • MYSQL_RES *mysql_store_result(MYSQL *mysql)
  • 功能說明:
    • 對於成功檢索了數據的每個查詢,必須調用mysql_store_result()或mysql_use_result()
    • 該函數將查詢的全部結果讀取到客戶端,分配1個MYSQL_RES結構,並將結果置於該結構中
    • 可以通過mysql_num_rows來找出結果集中的行數

 

事務處理

  • my_bool mysql_autocommit(MYSQL *mysql,my_bool mode)
    • 函數說明:如果模式爲1,啓動autocommit模式;如果模式爲0,禁止autocommit模式
  • my_bool mysql_commit(MYSQL *mysql)
    • 提交當前事務
  • my_bool mysql_rollback(MYSQL *mysql)
    • 回滾當前事務

 

處理結果集

  • MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
  • 功能描述
    • 檢索結果集的下一行
    • 行內值的數目由mysql_num_fields(result)給出
    • 可以調用mysql_fetch_lengths()來獲得行中字段值的長度
  • void mysql_data_seek(MYSQL_RES *result,my_ulonglong offset)
  • 功能描述:
    • 在查詢結果集中尋找任意行。偏移值爲行號。
    • 該函數要求結果集結構包含查詢的所有結果
  • MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result)
    • 返回光標的當前位置
  • MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result,MYSQL_ROW_OFFSET offset)
    • 將行光標置於查詢結果集中的任意行

每次接收一行數據

  • MYSQL_RES *mysql_use_result(MYSQL *mysql)
  • 功能說明:
    • 不像mysql_store_result()那樣把結果集實際讀取到客戶端。它必須通過對mysql_fetch_row()的調用,對每一行分別進行檢索。
    • Mysql_store_result()相比,速度更快而且使用的內存更少

 

多查詢執行的C API處理

  • 支持在單個字符串中指定的多語句的執行。要想與給定的連接一起使用該功能,打開連接時,必須將標誌參數中的CLIENT_MULTI_STATEMENTS選項指定給mysql_real_connect()。也可以通過調用mysql_set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON),爲已有的連接設置它

 

 

詳細api列表

MYSQL *mysql_init(MYSQL *mysql)

  •     分配或初始化與mysql_real_connect()相適應的MYSQL對象。
  • 如果mysql是NULL指針,該函數將分配、初始化、並返回新對象。否則,將初始化對象,並返回對象的地址。
  • 如果mysql_init()分配了新的對象,當調用mysql_close()來關閉連接時。將釋放該對象。

void mysql_close(MYSQL *mysql)

  • 關閉前面打開的連接。
  • 如果句柄是由mysql_init()或mysql_connect()自動分配的,mysql_close()還將解除分配由mysql指向的連接句柄。

mysql_real_connect函數

  • 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數據庫引擎建立連接
  • connect = mysql_real_connect(&mysql, "localhost", "root", "123456", "mydb2", 0, NULL, 0 );

 

查詢api

mysql_query()函數和mysql_real_query()函數

  • int mysql_query(MYSQL *mysql, const char *query)
  • int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
  • 對於包含二進制數據的查詢,必須使用mysql_real_query()而不是mysql_query(),
  • mysql_real_query()比mysql_query()快,這是因爲它不會在查詢字符串上調用strlen()。
 

 

獲取結果集api

mysql_store_result()函數和mysql_use_result

  • MYSQL_RES *mysql_store_result(MYSQL *mysql)
  • mysql_store_result()將查詢的全部結果讀取到客戶端,分配1個MYSQL_RES結構,並將結果置於該結構中;
  • 可調用mysql_num_rows()來找出結果集中的行數。可以調用mysql_fetch_row()來獲取結果集中的行,或調用mysql_row_seek()和mysql_row_tell()來獲取或設置結果集中的當前行位置。
  • 一旦完成了對結果集的操作,必須調用mysql_free_result()。
 

MYSQL_RES *mysql_use_result(MYSQL *mysql) 每次接收一行數據

  • 功能說明:
  • 不像mysql_store_result()那樣把結果集實際讀取到客戶端。它必須通過對mysql_fetch_row()的調用,對每一行分別進行檢索。
  • Mysql_store_result()相比,速度更快而且使用的內存更少






mysql_affected_rows() 返回被最新的UPDATEDELETEINSERT查詢影響的行數。
mysql_close() 關閉一個服務器連接。
mysql_connect() 連接一個MySQL服務器。該函數不推薦;使用mysql_real_connect()代替。
mysql_change_user() 改變在一個打開的連接上的用戶和數據庫。
mysql_create_db() 創建一個數據庫。該函數不推薦;而使用SQL命令CREATE DATABASE
mysql_data_seek() 在一個查詢結果集合中搜尋一任意行。
mysql_debug() 用給定字符串做一個DBUG_PUSH
mysql_drop_db() 拋棄一個數據庫。該函數不推薦;而使用SQL命令DROP DATABASE
mysql_dump_debug_info() 讓服務器將調試信息寫入日誌文件。
mysql_eof() 確定是否已經讀到一個結果集合的最後一行。這功能被反對; mysql_errno()mysql_error()可以相反被使用。
mysql_errno() 返回最近被調用的MySQL函數的出錯編號。
mysql_error() 返回最近被調用的MySQL函數的出錯消息。
mysql_escape_string() 用在SQL語句中的字符串的轉義特殊字符。
mysql_fetch_field() 返回下一個表字段的類型。
mysql_fetch_field_direct () 返回一個表字段的類型,給出一個字段編號。
mysql_fetch_fields() 返回一個所有字段結構的數組。
mysql_fetch_lengths() 返回當前行中所有列的長度。
mysql_fetch_row() 從結果集合中取得下一行。
mysql_field_seek() 把列光標放在一個指定的列上。
mysql_field_count() 返回最近查詢的結果列的數量。
mysql_field_tell() 返回用於最後一個mysql_fetch_field()的字段光標的位置。
mysql_free_result() 釋放一個結果集合使用的內存。
mysql_get_client_info() 返回客戶版本信息。
mysql_get_host_info() 返回一個描述連接的字符串。
mysql_get_proto_info() 返回連接使用的協議版本。
mysql_get_server_info() 返回服務器版本號。
mysql_info() 返回關於最近執行得查詢的信息。
mysql_init() 獲得或初始化一個MYSQL結構。
mysql_insert_id() 返回有前一個查詢爲一個AUTO_INCREMENT列生成的ID。
mysql_kill() 殺死一個給定的線程。
mysql_list_dbs() 返回匹配一個簡單的正則表達式的數據庫名。
mysql_list_fields() 返回匹配一個簡單的正則表達式的列名。
mysql_list_processes() 返回當前服務器線程的一張表。
mysql_list_tables() 返回匹配一個簡單的正則表達式的表名。
mysql_num_fields() 返回一個結果集合重的列的數量。
mysql_num_rows() 返回一個結果集合中的行的數量。
mysql_options() 設置對mysql_connect()的連接選項。
mysql_ping() 檢查對服務器的連接是否正在工作,必要時重新連接。
mysql_query() 執行指定爲一個空結尾的字符串的SQL查詢。
mysql_real_connect() 連接一個MySQL服務器。
mysql_real_query() 執行指定爲帶計數的字符串的SQL查詢。
mysql_reload() 告訴服務器重裝授權表。
mysql_row_seek() 搜索在結果集合中的行,使用從mysql_row_tell()返回的值。
mysql_row_tell() 返回行光標位置。
mysql_select_db() 連接一個數據庫。
mysql_shutdown() 關掉數據庫服務器。
mysql_stat() 返回作爲字符串的服務器狀態。
mysql_store_result() 檢索一個完整的結果集合給客戶。
mysql_thread_id() 返回當前線程的ID。
mysql_use_result() 初始化一個一行一行地結果集合的檢索。
mysql_affected_rows() 返回被最新的UPDATEDELETEINSERT查詢影響的行數。
mysql_close() 關閉一個服務器連接。
mysql_connect() 連接一個MySQL服務器。該函數不推薦;使用mysql_real_connect()代替。
mysql_change_user() 改變在一個打開的連接上的用戶和數據庫。
mysql_create_db() 創建一個數據庫。該函數不推薦;而使用SQL命令CREATE DATABASE
mysql_data_seek() 在一個查詢結果集合中搜尋一任意行。
mysql_debug() 用給定字符串做一個DBUG_PUSH
mysql_drop_db() 拋棄一個數據庫。該函數不推薦;而使用SQL命令DROP DATABASE
mysql_dump_debug_info() 讓服務器將調試信息寫入日誌文件。
mysql_eof() 確定是否已經讀到一個結果集合的最後一行。這功能被反對; mysql_errno()mysql_error()可以相反被使用。
mysql_errno() 返回最近被調用的MySQL函數的出錯編號。
mysql_error() 返回最近被調用的MySQL函數的出錯消息。
mysql_escape_string() 用在SQL語句中的字符串的轉義特殊字符。
mysql_fetch_field() 返回下一個表字段的類型。
mysql_fetch_field_direct () 返回一個表字段的類型,給出一個字段編號。
mysql_fetch_fields() 返回一個所有字段結構的數組。
mysql_fetch_lengths() 返回當前行中所有列的長度。
mysql_fetch_row() 從結果集合中取得下一行。
mysql_field_seek() 把列光標放在一個指定的列上。
mysql_field_count() 返回最近查詢的結果列的數量。
mysql_field_tell() 返回用於最後一個mysql_fetch_field()的字段光標的位置。
mysql_free_result() 釋放一個結果集合使用的內存。
mysql_get_client_info() 返回客戶版本信息。
mysql_get_host_info() 返回一個描述連接的字符串。
mysql_get_proto_info() 返回連接使用的協議版本。
mysql_get_server_info() 返回服務器版本號。
mysql_info() 返回關於最近執行得查詢的信息。
mysql_init() 獲得或初始化一個MYSQL結構。
mysql_insert_id() 返回有前一個查詢爲一個AUTO_INCREMENT列生成的ID。
mysql_kill() 殺死一個給定的線程。
mysql_list_dbs() 返回匹配一個簡單的正則表達式的數據庫名。
mysql_list_fields() 返回匹配一個簡單的正則表達式的列名。
mysql_list_processes() 返回當前服務器線程的一張表。
mysql_list_tables() 返回匹配一個簡單的正則表達式的表名。
mysql_num_fields() 返回一個結果集合重的列的數量。
mysql_num_rows() 返回一個結果集合中的行的數量。
mysql_options() 設置對mysql_connect()的連接選項。
mysql_ping() 檢查對服務器的連接是否正在工作,必要時重新連接。
mysql_query() 執行指定爲一個空結尾的字符串的SQL查詢。
mysql_real_connect() 連接一個MySQL服務器。
mysql_real_query() 執行指定爲帶計數的字符串的SQL查詢。
mysql_reload() 告訴服務器重裝授權表。
mysql_row_seek() 搜索在結果集合中的行,使用從mysql_row_tell()返回的值。
mysql_row_tell() 返回行光標位置。
mysql_select_db() 連接一個數據庫。
mysql_shutdown() 關掉數據庫服務器。
mysql_stat() 返回作爲字符串的服務器狀態。
mysql_store_result() 檢索一個完整的結果集合給客戶。
mysql_thread_id() 返回當前線程的ID。
mysql_use_result() 初始化一個一行一行地結果集合的檢索。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章