函数运行
在C連接mysql服務(wù)器,需要使用libmysqlclient開(kāi)發(fā)包。在ubuntu系統(tǒng)上可以通過(guò)
命令 sudo apt-get install libsqlclient-dev 安裝。
和其它和數(shù)據(jù)庫(kù)訪問(wèn)類似,具體的過(guò)程有
1,連接數(shù)據(jù)庫(kù)
2,訪問(wèn)數(shù)據(jù)
3,處理數(shù)據(jù)
4,斷開(kāi)連接
下面,接上面的順序來(lái)了解mysql數(shù)據(jù)庫(kù)編程所要用到的具體函數(shù)
一,連接數(shù)據(jù)庫(kù)
1,初始化一個(gè)連接句柄
MYSQL *mysql_init(MYSQL *);
//參數(shù)如果為NULL,則分配一個(gè)新的連接句柄
2,int mysql_option(MYSQL *connection, enum option_to_set, const char *
argument);
//這個(gè)函數(shù)用來(lái)設(shè)置連接特性的,也可以不設(shè),一切會(huì)默認(rèn)。而且,每次只能設(shè)
置一個(gè)選項(xiàng),想設(shè)置多個(gè)選項(xiàng),則需要多次調(diào)用。 以下是三個(gè)主要的選項(xiàng),其它
見(jiàn)手冊(cè)。
枚舉選項(xiàng) 實(shí)際參數(shù)類型 含義
MYSQL_OPT_CONNECT_TIMEOUT?? 常數(shù),無(wú)符號(hào)的整數(shù)類型?? 中止連接前等待的秒
數(shù)
MYSQL_OPT_COMPRESS??? 無(wú),使用NULL?????? 在網(wǎng)絡(luò)連接中使用壓縮
MYSQL_INIT_COMMAND??? 常數(shù) ,char* 連接建立以后發(fā)送的命令
3,設(shè)置及連接數(shù)據(jù)庫(kù)
MYSQL *mysql_real_connect(MYSQL *connection, //連接句柄
const char *server_host, //數(shù)據(jù)庫(kù)所在主機(jī)名
const char *sql_username; //訪問(wèn)數(shù)據(jù)庫(kù)的數(shù)據(jù)名
const char *sql_password; //密碼
const char *db_name; //數(shù)據(jù)庫(kù)名
unsigned int port_number, //端口號(hào),為0則使用默認(rèn)(一般選擇)
const char *unix_socket_name, //一般為NULL
unsigned int flags); //見(jiàn)說(shuō)明
//它們的含意參數(shù) 的名稱已經(jīng)很明白了,而最后一個(gè)參數(shù) flags只有兩個(gè)參數(shù)
可供選擇
CLIENT_ODBC---如果你確知ODBC正用于遠(yuǎn)程數(shù)據(jù)庫(kù),則需要用到它。
CLIENT_FOUND_ROW--???
二,執(zhí)行SQL語(yǔ)句 mysql_query
int mysql_query(MYSQL *connection, const char *query);
利用connection對(duì)query的SQL語(yǔ)句執(zhí)行成功,則返回 0.
三,獲取數(shù)據(jù)
1,檢驗(yàn)受影響的行數(shù)量
my_ulonglong mysql_affected_rows(MYSQL *connection);
2,檢索數(shù)據(jù)
一般,我們用mysql_query發(fā)出查詢,利用mysql_store_result或
mysql_use_result執(zhí)行檢索。再可以用mysql_fetch_row來(lái)處理數(shù)據(jù),最后用
mysql_free_result進(jìn)行整理工作。
MYSQL_RES *mysql_store_result(MYSQL *connection);
//如果執(zhí)行失敗則返回 NULL
實(shí)際 返回 的行數(shù) :
my_ulonglong mysql_num_rows(MYSQL_RES *result);
獲得從store result中得到的結(jié)構(gòu)體,并從中檢索單個(gè)行,返回給你的行結(jié)構(gòu)體
中的數(shù)據(jù)。當(dāng)沒(méi)有更多的數(shù)據(jù),或者出錯(cuò)時(shí),將返回NULL值。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
在結(jié)果集合中跳躍,設(shè)置由下面的fetch row選項(xiàng)返回 的行。區(qū)距值是一個(gè)行的
號(hào)碼,這個(gè)值大于零而小于結(jié)果集合中的行數(shù)量。傳遞零值將會(huì)在下一次調(diào)用到
mysql_fetch_row中時(shí)返回 第一行。
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);
得到一個(gè)區(qū)距值(off value),表明 在結(jié)果集合中當(dāng)前的位置。它不是行數(shù),所
以不能用mysql_data_seek來(lái)使用它。
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);
在結(jié)果集合中移動(dòng)當(dāng)前位置,并將當(dāng)前的位置返回
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET
offset);
當(dāng)使用完一個(gè)結(jié)果集合后,要使MYSQL庫(kù)整理分配的對(duì)象。
void mysql_free_result(MYSQL_RES *result);
逐行檢索數(shù)據(jù)
MYSQL_RES * mysql_use_result(MYSQL *connection);
//它嚅然 也是返回 一個(gè)結(jié)果集合對(duì)象,但在返回 時(shí)它實(shí)際 上并沒(méi)有將任何檢
索到的數(shù)據(jù)返回 到結(jié)果集合中,而僅僅是將結(jié)果集合初始化來(lái)接收數(shù)據(jù)。
注:: 為了檢索數(shù)據(jù),你必須和以前 一樣反復(fù) 調(diào)用 mysql_fetch_row,直到檢
索完所有的數(shù)據(jù),如果你在一次use result調(diào)用中沒(méi)有得到所有的數(shù)據(jù),那么后面
的數(shù)據(jù)檢索就損壞 了。
?
轉(zhuǎn)載于:https://blog.51cto.com/ff6893058/413862
總結(jié)
- 上一篇: Delphi实现截屏功能
- 下一篇: Graphics View 坐标系统