不想用odbc什麼的連線資料庫,想直接用mysql提供的介面連線資料庫。我用的是vs2005。
網上的一些介紹都是修改專案屬性等的設定,我不喜歡那樣。
首先 我們需要的檔案有mysql.h my_alloc.h my_list.h mysql_com.h mysql_time.h mysql_version.h typelib.h 以及libmysql.lib和libmysql.dll全拷到專案資料夾下。 以上提到的檔案都在mysql安裝目錄下,比如我的是:
c:\program files\mysql\mysql server 5.5。.h檔案在include目錄下; .lib和.dll檔案在lib目錄下。
準備好後,首先包含標頭檔案和鏈結mysql庫,這裡要注意不要忘記包含winsock.h,這是連線資料庫必須的,從workbench連線資料庫時彈出的對話方塊可以看出是通過tcp連線的。
定義兩個mysql結構體變數
mysql mysql, *sock;
下面是初始化連線
mysql_init(&mysql);
主要給結構體內的元素賦初值。
接下來是真正的連線
mysql_real_connect(&mysql, "localhost", "username", "password", "dbname", null, 0, null);
第乙個引數不說了;第二個引數是資料庫所在的主機位址;第
三、四個引數是使用者名稱、密碼;第五個引數是要連線的資料庫名稱;第六個引數是埠號,可以指定也可以賦為0;第七個引數是指定連線的套接字,也不用管;第八個引數一般情況下都是0。
注意函式的返回值和php的不一樣。連線成功返回0,否則返回非0。出錯資訊可以呼叫sql_error(mysql* )來檢視。
定義sql語句(最後沒有分號):
char sqlbuf[100] = "select device_route from device";
下面讓mysql執行sql語句:
mysql_query(sock, sqlbuf);
該函式也是成功(即使沒有查詢到資料)返回0,失敗返回非0。
查詢到了資料後就是獲取查詢結果了,這裡還要定義兩個結構體:查詢結果結構體和記錄結構體(儲存一條記錄)
mysql_res *res;
mysql_row row; // 本質上就是二維陣列
獲取查詢結果
res = mysql_store_result(sock);
獲取每一條記錄
while (row = mysql_fetch_row(res))
釋放查詢結果:
mysql_free_result(res);
關閉mysql連線:
mysql_close(sock);
sock = null;
如果是insert、update等非查詢語句到mysql_query()就可以結束了,因為沒有結果可存。
完整的實現如下:
#include #include "accessmysql.h"
#include "mysql.h"
void main()
char sqlbuf[200] = "select device_route from device limit 0,1";
if (mysql_query(sock, sqlbuf))
mysql_res *res;
mysql_row row;
if (!(res = mysql_store_result(sock)))
while (row = mysql_fetch_row(res))
mysql_free_result(res);
mysql_close(sock);
}
the end. C語言連線mysql資料庫
一 分配或初始化與mysql real connect 相適應的mysql物件。用mysql init 函式。mysql mysql init mysql mysql 描述 分配或初始化與mysql real connect 相適應的mysql物件。如果mysql是null指標,該函式將分配 初始化...
C語言連線mysql資料庫
作業系統是linux,需要mysql客戶端軟體開發庫libmysqlclient,這個函式庫是mysql的組成部分之一。一般標頭檔案都在 usr include mysql路徑下,庫檔案都在 usr lib mysql路徑下。如果沒有需要安裝mysql devel包 mysql devel 5.1....
C語言連線MYSQL資料庫
1 初始化 mysql mysql mysql init null 描述分配或初始化與mysql real connect 相適應的mysql物件。如果mysql是null指標,該函式將分配 初始化 並返回新物件。否則,將初始化物件,並返回物件的位址。如果mysql init 分配了新的物件,當呼叫...