要想知道怎麼通過c語言操作數據庫,必須要了解這幾個結構體的含義,這裡只是簡單說一下如果想要了解的更深入可以到網上搜一下
1、MYSQL結構代表一個數據庫連接的句柄,包含有關服務器的連接狀態的信息,幾乎所有的函數均使用到他。要連接MySQL,必須建立MYSQL實例,通過mysql_init初始化方能開始連接。
2、MYSQL_RES結果代表返回的查詢結果(select,show等)。也將查詢的返回的信息成為“結果集”。在c的API裡對應的就是MYSQL_RES了,從數據庫讀取數據,最後從MYSQL_RES中讀取數據。這裡歸納了C API可使用的函數,詳見MYSQL手冊
函數
描述
mysql_affected_rows()
返回上次UPDATE、DELETE或INSERT查詢更改/刪除/插入的行數。
mysql_autocommit()
切換 autocommit模式,ON/OFF
mysql_change_user()
更改打開連接上的用戶和數據庫。
mysql_charset_name()
返回用於連接的默認字符集的名稱。
mysql_close()
關閉服務器連接。
mysql_commit()
提交事務。
mysql_connect()
連接到MySQL服務器。該函數已不再被重視,使用mysql_real_connect()取代。
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_client_version()
以整數形式返回客戶端版本信息。
mysql_get_host_info()
返回描述連接的字符串。
mysql_get_server_version()
以整數形式返回服務器的版本號。
mysql_get_proto_info()
返回連接所使用的協議版本。
mysql_get_server_info()
返回服務器的版本號。
mysql_info()
返回關於最近所執行查詢的信息。
mysql_init()
獲取或初始化MYSQL結構。
mysql_insert_id()
返回上一個查詢為AUTO_INCREMENT列生成的ID。
mysql_kill()
殺死給定的線程。
mysql_library_end()
最終確定MySQL C API庫。
mysql_library_init()
初始化MySQL C API庫。
mysql_list_dbs()
返回與簡單正則表達式匹配的數據庫名稱。
mysql_list_fields()
返回與簡單正則表達式匹配的字段名稱。
mysql_list_processes()
返回當前服務器線程的列表。
mysql_list_tables()
返回與簡單正則表達式匹配的表名。
mysql_more_results()
檢查是否還存在其他結果。
mysql_next_result()
在多語句執行過程中返回/初始化下一個結果。
mysql_num_fields()
返回結果集中的列數。
mysql_num_rows()
返回結果集中的行數。
mysql_options()
為mysql_connect()設置連接選項。
mysql_ping()
檢查與服務器的連接是否工作,如有必要重新連接。
mysql_query()
執行指定為“以Null終結的字符串”的SQL查詢。
mysql_real_connect()
連接到MySQL服務器。
mysql_real_escape_string()
考慮到連接的當前字符集,為了在SQL語句中使用,對字符串中的特殊字符進行轉義處理。
mysql_real_query()
執行指定為計數字符串的SQL查詢。
mysql_refresh()
刷新或復位表和高速緩沖。
mysql_reload()
通知服務器再次加載授權表。
mysql_rollback()
回滾事務。
mysql_row_seek()
使用從mysql_row_tell()返回的值,查找結果集中的行偏移。
mysql_row_tell()
返回行光標位置。
mysql_select_db()
選擇數據庫。
mysql_server_end()
最終確定嵌入式服務器庫。
mysql_server_init()
初始化嵌入式服務器庫。
mysql_set_server_option()
為連接設置選項(如多語句)。
mysql_sqlstate()
返回關於上一個錯誤的SQLSTATE錯誤代碼。
mysql_shutdown()
關閉數據庫服務器。
mysql_stat()
以字符串形式返回服務器狀態。
mysql_store_result()
檢索完整的結果集至客戶端。
mysql_thread_id()
返回當前線程ID。
mysql_thread_safe()
如果客戶端已編譯為線程安全的,返回1。
mysql_use_result()
初始化逐行的結果集檢索。
mysql_warning_count()
返回上一個SQL語句的告警數。
下面看一下到底怎麼通過C API操作數據庫
下面的例子為讀取數據庫的表中的數據
#include <stdio.h> #include <mysql.h> #include <string.h> int main() { MYSQL mysql; //mysql連接 MYSQL_RES *res; //這個結構代表返回行的一個查詢結果集 MYSQL_ROW row; //一個行數據的類型安全(type-safe)的表示 char *query; //查詢語句 int t,r; mysql_init(&mysql); if (!mysql_real_connect(&mysql,"localhost", "root", NULL, "test",0,NULL,0)) { printf( "Error connecting to database: %s",mysql_error(&mysql)); } else { printf("Connected...\n"); } query=" select * from qq"; t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));//執行指定為計數字符串的SQL查詢。 if(t) { printf("執行顯示時出現異常: %s",mysql_error(&mysql)); } res=mysql_store_result(&mysql);//檢索完整的結果集至客戶端。 printf("姓名\t學號\t年齡\t\n"); while(row=mysql_fetch_row(res)) { for(t=0;t<mysql_num_fields(res);t++) { printf("%s\t" ,row[t]); } printf("\n"); } mysql_free_result(res);//釋放結果集使用的內存。 mysql_close(&mysql); return 0; }
運行的命令和代碼如下:
其實它是很簡單的東西。