原文:
用c語言操縱mysql
以下**塊是用來連線資料庫的通訊過程,要連線mysql,必須建立mysql例項,通過mysql_init初始化方能開始進行連線.
typedef struct st_mysql mysql;這個結構代表返回行的乙個查詢的(
select
,show
,describe
,explain
)的結果。返回的資料稱為「資料集」,用過資料庫的朋友應該對資料庫中查詢後得到的結果集不會陌生,在c的api裡對應的就是mysql_res了,從資料庫讀取資料,最後就是從mysql_res中讀取資料。
typedef struct st_mysql_res mysql_res;再看函式:
c語言操作mysql資料 常用函式
所需標頭檔案: #include 功能: 獲得或初始化乙個mysql結構 函式原型: mysql *mysql_init(mysql *mysql) 函式返回值: 乙個被始化的mysql*控制代碼 備註: 在記憶體不足的情況下,返回null
所需標頭檔案: #include 函式功能: 關閉乙個伺服器連線,並釋放與連線相關的記憶體 函式原型: void mysql_close(mysql *mysql); 函式傳入值: mysql:型別的指標 函式返回值: 無
所需標頭檔案: #include 函式功能: 連線乙個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_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 函式功能: 返回最新的update,delete或insert查詢影響的行數 函式傳入值: mysql:型別指標 函式返回值: 大於零的乙個整數表示受到影響或檢索出來的行數。零表示沒有區配查序中where子句的記錄或目前還沒有查詢被執行;-1表示查詢返回乙個錯誤,或對於乙個select查詢
所需標頭檔案: #include 函式功能: 對指定的連線執行查詢 函式原型: int mysql_query(mysql *mysql,const char *query); 函式傳入值: query表示執行的sql語句 函式返回值: 如果查詢成功,為零,出錯為非零。 相關函式: mysql_real_query
所需標頭檔案: #include 函式功能: 為無緩衝的結果集獲得結果識別符號 函式原形: mysql_res *mysql_use_result(mysql *mysql); 函式傳入值: mysql:型別的指標 函式返回值: 乙個mysql_res結果結構,如果發生乙個錯誤發null
#incluee 檢索乙個結果集合的下一行 mysql_row mysql_fetch_row(mysql_res *result); mysql_res:結構的指標 下一行的乙個mysql_row結構。如果沒有更多的行可檢索或如果出現乙個錯誤,null
#include 返回指定結果集中列的數量 unsigned int mysql_num_fields(mysql_res *res); mysql_res 結構的指標 結果集合中欄位數量的乙個無符號整數
#include 建立乙個資料庫 int mysql_create_db(mysql *mysql,const char *db); mysql:型別的指標 db:要建立的資料庫名 如果資料庫成功地被建立,返回零,如果發生錯誤,為非零。
#include 選擇乙個資料庫 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伺服器上9***_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_init(&
mysql
); if(
!(sock
= mysql_real_connect(&
mysql,"
localhost",
"dbuser",
"dbpwd",
"9***_bbs_utf8",
0,null
,0)))
sprintf
(qbuf
,select_query
,atoi
(argv[1
])); if(
mysql_query
(sock
,qbuf
))if(!
(res
=mysql_store_result
(sock
)))printf("
number of fields returned: %d\n
",mysql_num_fields
(res
));
while
(row
= mysql_fetch_row
(res
))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 資料操縱語言 DML
資料操縱語言dml data manipulation language 使用者通過它可以實現對資料庫的基本操作。以下操作主要基於這張表 sql語句 drop table ifexists demo create table demo id intnot null auto increment,us...
mysql資料庫操縱語言
dml語言增刪改查 插入insert into 表名 列名 values 值列表 例項 insert into students sname,saddress,sgrade,semail,s values 張青裁 上海松江 6,zqc sohu.com 0 注意事項1 每次插入一行資料,不能只插入半...
Mysql 中DDL資料操縱語言 GRANT的使用
1 操作許可權 dcl語句主要是dba用來管理資料庫物件的使用許可權 grant allprivileges on to test identified by test with grant option all privileges表示所有該使用者擁有所有操作許可權,也可以設定單個許可權 如sel...