6.2 客戶機程序1—連接到服務器
我們的第一個MySQL客戶機程序很簡單:連接到服務器、斷開,並退出。它本身並不是非常有用,但是必須知道如何做它,因為實際上用MySQL數據庫做任何事情都必須與服務器連接。這是一個公用的操作,開發創建連接的代碼是編寫每個客戶機程序都將使用的代碼。除此之外,這項任務帶給我們一些簡單開始的事情。以後,我們可以增加這個客戶機來做一些更有用的事情。我們第一個客戶機程序的源代碼,客戶機程序1,包括一個單獨的文件, clIEnt.c:
這個源文件以包括stdio.h 和mysql.h 開始。MySQL客戶機可能包括其他的頭文件,但是一般來說至少有兩個是最基本的。
主機名稱、用戶名稱、口令和數據庫名稱的缺省值固定在代碼內部,使事情變得簡單。以後,我們將參數化這些值,以便可以在選項文件或命令行中指定它們。程序的main() 函數創建和終止與服務器的連接。建立連接使用如下兩個步驟:
1) 調用mysql_init() 來獲取連接處理程序。MYSQL 數據類型是一個包括連接信息的結構。這種類型的變量稱為連接處理程序。當我們將NULL 傳遞給mysql_init() 時,它分配一個MySQL 變量,初始化它,然後返回一個指向它的指針。
2) 調用mysql_real_connect() 來創建與服務器的連接。MySQL_real_connect() 可有任意數量的參數,例如:
■ 連接處理程序的指針。這不能為NULL;它應該是由MySQL_init() 返回的值。
■ 服務器主機。如果指定NULL 或主機“localhost”,則客戶機連接到在本地主機使用UNIX 套接字運行的服務器上。如果指定一個主機名稱或主機的IP 地址,則客戶機連接到使用TCP/IP 連接命名的主機上。
在Windows 上,除了使用TCP/IP 連接而不是用UNIX 套接字以外,這種操作是類似的(在Windows NT 上,如果主機為NULL,則在TCP/IP 以前,先試著使用一個指定的管道來連接)。
■ 用戶名稱和口令。如果名稱為NULL,則客戶機庫將邏輯名稱發送給服務器。如果口令為NULL,則不發送口令。
■ 端口號和套接字文件。這些指定為0 或NULL,來告知客戶機庫使用它的缺省值。如果不指定端口和套接字,則根據希望連接到的主機確定這些缺省值。附錄F 中的MySQL_real_connect() 的描述給出有關這些的詳細情況。
■ 標志值。因為我們不使用任何特定的連接操作,因此它是0。這個參數可用的選項在附錄F 中的mysql_real_connect() 的項目中討論詳細情況。要想終止這個連接,可將連接處理程序的指針傳遞給mysql_ close()。當將連接處理程序傳遞mysql_close() 來終止個連接時,由MySQL_init() 自動分配的連接處理程序自動地釋放。
要想測試客戶機程序1,可使用本章前面建立客戶機程序時給出的指導來編譯和連接,然後運行它:
% clIEnt1 程序連接到服務器、斷開並退出。這一點都不令人興奮,但它是一個開始。然而,它只是一個開始,因為有兩個重要的缺點:
■ 客戶機沒有錯誤檢查,所以並不真正地知道實際上它是否在工作!
■ 連接參數(主機名稱,用戶名稱等)在源代碼內部固定。如果允許用戶通過指定選項文件或命令行中的參數來解決這個問題則更好一些。這些問題的處理都不困難。我們將在下面專門解決它們。