C語言操作MYSQL------基於VC6.0 & VS2010
相信大家在ubuntu下用c操作mysql已經相當的熟悉,對比在windows下其實操作起來也不復雜,這個教程是為了整理在windows下用c操作mysql的過程,平臺基於VC6.0,相信VS2010等一樣可以照此移植。
1、開啟VC6.0,建立Win32的控制檯應用程式,工程名稱為testsql,如下圖:
確定後選擇Hello,world的範例工程。
2、對VC6.0的編譯環境進行配置
首先、告訴編譯器你的mysql的標頭檔案的路徑(我的路徑是:C:\Program Files\MySQL\MySQL Server 5.5\include),選擇VC6.0的選單:工具---->選項---->目錄,到此選擇Include Files,如下圖:
選擇新增標頭檔案的路徑:C:\Program Files\MySQL\MySQL Server 5.5\include
其次、在相同的介面下選擇Library Files,新增mysql的lib庫和dll庫檔案的路徑,我的是(C:\Program Files\MySQL\MySQL Server 5.5\lib),新增完如下圖:
OK,最後、需要注意的是,我們設定完成之後,要在VC6.0的選單:工程---->設定---->連線---->物件/庫模組內新增庫名稱:libmysql.lib,如下圖:
當然如果到此設定之後,你的工程還是會報錯或者執行失敗,可以嘗試把(C:\Program Files\MySQL\MySQL Server 5.5\lib)目錄內libmysql.dll和libmysql.lib檔案拷貝到你的工程目錄內(根目錄),再次執行看看。
3、測試,連線資料庫,查詢資料庫內的指定表資料(我已經在MYSQL SEVER內建了一個watersensors的資料庫,其中建立了一個名為sensors的表),程式碼如下:
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> // 需要新增MYSQL庫要用到 #include <winsock2.h> #include "mysql.h" #pragma comment(lib, "ws2_32") // 可以根據實際情況下面的預編譯可以不需要 #pragma comment(lib, "libmysql") int main(int argc, char* argv[]) { MYSQL mysql; MYSQL_RES *result; MYSQL_ROW row; // 初始化mysql結構 mysql_init(&mysql); if(mysql_real_connect(&mysql,"127.0.0.1","root","WYS1234","watersensors",3306,NULL,0) == NULL) { printf("連線失敗,錯誤報告是: %s\n",mysql_error(&mysql)); } else { printf("資料庫連線成功……\n"); } // 如果連線成功,則開始查詢 if(mysql_query(&mysql, "select * from sensors") != 0) { printf("查詢失敗,錯誤報告是: %s\n",mysql_error(&mysql)); } else { printf("資料庫查詢成功……\n"); // 儲存查詢的結果 if((result = mysql_store_result(&mysql)) == NULL) { printf("儲存結果集失敗,錯誤報告是: %s\n",mysql_error(&mysql)); } else { // 讀取結果集中的資料,返回的是下一行。因為儲存結果集時,當前的遊標在第一行【之前】 while((row = mysql_fetch_row(result)) != NULL) { // 列印當前行的第一列的資料 printf("deviceid is %s\n", row[0]); } } } // 釋放查詢結果 mysql_free_result(result); // 關閉資料庫連線 mysql_close(&mysql); // 退出mysql mysql_library_end(); printf("Hello World!\n"); return 0; }
4、編譯執行結果如下:
<完>
<補>
對於VS2010的控制檯應用程式來說,需要如下步驟:
1、選單---->專案---->專案屬性---->配置屬性---->VC++目錄,將【包含目錄】程式設計新增MYSQL的標頭檔案目錄,
將【庫目錄】編輯新增MYSQL的庫目錄,如下圖:
2、新增庫,同1中的相同介面下選擇【聯結器】,在【附加依賴項】內新增libmysql.lib,如下圖:
3、必須將MYDQL庫目錄下的libmysql.lib和libmysql.cll檔案複製到工程的根目錄下,如工程目錄在D:\TestSQL,
則複製到TestSQL\TestSQL目錄下。
4、編譯執行,檢視結果如下:
5、結束
【附上從連線到建立到建表到插入資料的c程式碼全過程】
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
// 需要新增MYSQL庫要用到
#include <winsock2.h>
#include "mysql.h"
#pragma comment(lib, "ws2_32")
// 可以根據實際情況下面的預編譯可以不需要
#pragma comment(lib, "libmysql")
int main(int argc, char* argv[])
{
char ch;
MYSQL mysql;
MYSQL_RES *result;
MYSQL_ROW row;
long systim1,systim2;
// 記錄開始時間
systim1 = GetTickCount();
// 初始化mysql結構
mysql_init(&mysql);
if(mysql_real_connect(&mysql,"127.0.0.1","root","WYS1234",NULL,3306,NULL,0) == NULL)
{
printf("連線失敗,錯誤報告是: %s\n", mysql_error(&mysql));
}
else
{
printf("資料庫伺服器連線成功……\n");
}
// 建立一個數據庫
if(mysql_query(&mysql,"create database if not exists helloworld") != 0)
{
printf("資料庫建立失敗,錯誤報告是: %s\n", mysql_error(&mysql));
}
else
{
printf("資料庫helloworld建立成功……\n");
}
// 選擇資料庫
if(mysql_query(&mysql,"use helloworld") != 0)
{
printf("資料庫選擇失敗,錯誤報告是: %s\n", mysql_error(&mysql));
}
else
{
printf("資料庫選擇成功……\n");
}
// 建立一張表
if(mysql_query(&mysql,"create table sensors(deviceid varchar(20))") != 0)
{
printf("資料庫建表失敗,錯誤報告是: %s\n", mysql_error(&mysql));
}
else
{
printf("資料庫建表成功……\n");
}
// 插入一條資料
if(mysql_query(&mysql,"insert into sensors(deviceid) value('5566998877445566')") != 0)
{
printf("插入資料失敗,錯誤報告是: %s\n",mysql_error(&mysql));
}
else
{
printf("資料庫插入成功……\n");
}
// 如果連線成功,則開始查詢
if(mysql_query(&mysql, "select * from sensors") != 0)
{
printf("查詢失敗,錯誤報告是: %s\n",mysql_error(&mysql));
}
else
{
printf("資料庫查詢成功……\n");
// 儲存查詢的結果
if((result = mysql_store_result(&mysql)) == NULL)
{
printf("儲存結果集失敗,錯誤報告是: %s\n",mysql_error(&mysql));
}
else
{
// 讀取結果集中的資料,返回的是下一行。因為儲存結果集時,當前的遊標在第一行【之前】
while((row = mysql_fetch_row(result)) != NULL)
{
// 列印當前行的第一列的資料
printf("deviceid is %s\n", row[0]);
}
}
}
// 釋放查詢結果
mysql_free_result(result);
// 關閉資料庫連線
mysql_close(&mysql);
// 退出mysql
mysql_library_end();
// 記錄結束時間
systim2 = GetTickCount();
printf("used times is %dms\n",systim2 - systim1);
printf("Hello World!\n");
printf("press enter to exit!\n");
scanf("%c",&ch);
return 0;
}