柚子快報(bào)激活碼778899分享:c語言 C/C++ 連接數(shù)據(jù)庫
柚子快報(bào)激活碼778899分享:c語言 C/C++ 連接數(shù)據(jù)庫
????????C/C++連接MYSQL數(shù)據(jù)庫的思路都是將MySQL官方提供的工具加入編譯器的庫或路徑(至少是Dev-C++和VS是這樣)
那這些工具在哪兒呢?
它們在你MYSQL安裝目錄的MySQL Server文件夾下的"include"文件夾和"lib"文件夾中
那要怎么把它們加入編譯器呢?作者下面就以Dev-C++的添加方法作為樣本做一個詳細(xì)介紹!
環(huán)境配置:
首先打開Dev-C++,點(diǎn)擊其窗口欄中的"Tools"(工具),再點(diǎn)擊其中的"Compiler options"(編譯器選項(xiàng))
然后在打開窗口的第二個大框中添加字符串" -lmysql",像這樣
然后點(diǎn)擊上面的"Directories"(索引)選項(xiàng),之后點(diǎn)擊里邊的"Libraries"(庫)選項(xiàng),然后下面有這樣一個添加的小按鈕,點(diǎn)擊進(jìn)入文件瀏覽器,在搜索框中輸入G:\MySQL\lib點(diǎn)擊確定,之后點(diǎn)擊它下面的"add"(添加)按鈕
然后跳轉(zhuǎn)到隔壁"C Includes",以同樣的方法添加一個路徑G:\MySQL\include
之后要不嫌麻煩可以順帶把隔壁的"C++ Includes"一道配了,這樣用C++就也能連接MYSQL了
然后呢,還有最后一步操作:將之前添加路徑時用到的"lib"文件夾下的“l(fā)ibmysql.dll”文件復(fù)制粘貼到系統(tǒng)根目錄(“C:\Windows”)下,這樣整個環(huán)境配置工作就算是完整落幕了。
以上操作我也是借鑒了他人的博客:C/C++連接MYSQL(巨詳)
接著就是連接步驟:
C/C++連接MYSQL思路:
一、初始化數(shù)據(jù)庫連接句柄
二、連接數(shù)據(jù)庫
三、設(shè)置字符集,防止發(fā)生亂碼
四、設(shè)置操作命令
五、設(shè)置結(jié)果集接收返回結(jié)果(并輸出)
六、關(guān)閉結(jié)果集、斷開連接
連接的過程中遇到的問題:
1、動態(tài)庫問題
? ?在編譯之前一定要記得將libmysql.dll動態(tài)庫復(fù)制粘貼到系統(tǒng)根目錄(“C:\Windows”)下。
2、連接時函數(shù)參數(shù)問題
????MYSQL *mysql_real_connect(
MYSQL *mysql, //指定現(xiàn)有 MYSQL結(jié)構(gòu)的地址。在調(diào)用之前 mysql_real_connect(),先調(diào)用 mysql_init()初始化MYSQL結(jié)構(gòu)
?? ??const char *host, //值host可以是主機(jī)名或 IP 地址、如果host是NULL 或字符串"localhost",則假定連接到本地主機(jī)
?? ??const char *user, //該user參數(shù)包含用戶的 MySQL 登錄 ID。如果user是 NULL或空字符串 "",則假定為當(dāng)前用戶
?? ??const char *passwd,
?? ??const char *db, //db是數(shù)據(jù)庫名稱
?? ??unsigned int port, //如果port不為 0,則該值用作 TCP/IP 連接的端口號。請注意, host參數(shù)決定了連接的類型。
?? ??const char *unix_socket,//如果unix_socket不是 NULL,則該字符串指定要使用的套接字或命名管道。
?? ??unsigned long client_flag)//的值client_flag通常為 0
在連接時一定要記得將mysql_real_connect函數(shù)的參數(shù)寫對,我出現(xiàn)問題是因?yàn)槲译娔X中搞了兩個MySQL然后在安裝第二個MySQL的時候?yàn)榱吮苊舛丝跊_突我將默認(rèn)端口3306改成了3308,還有就是因?yàn)閮蓚€數(shù)據(jù)庫的密碼不一樣讓我搞混了很多次以至于老是連接失敗。
3、環(huán)境變量問題
因?yàn)槲野惭b了兩個MySQL然后我再編程時連接的確定第二個MySQL的數(shù)據(jù)庫,然而第一個MySQL的/bin路徑又在第二MySQL前面以至于我的代碼移植連接不上第二個MySQL,后面將第一個路徑刪了最終得以成功。
代碼如下:
#include
#include
int main() {
char host[10] = "localhost"; //IP
char user[5] = "root"; //用戶
char password[12] = "xxxxxx"; //密碼
char database[6] = "mysql"; //連接的數(shù)據(jù)庫名稱數(shù)據(jù)庫
int port=3308; //連接的端口號 默認(rèn)為3306,我的為3308
MYSQL* conn; //設(shè)置數(shù)據(jù)庫連接句柄
conn = mysql_init(NULL); //初始化連接句柄
if(!conn){
puts("初始化失?。?);
return EXIT_FAILURE;
}
conn = mysql_real_connect(conn,host,user,password,database,port,NULL,0);//連接數(shù)據(jù)庫
if(conn) puts("數(shù)據(jù)庫連接成功!"); //判斷數(shù)據(jù)庫是否連接成功
else{
printf("數(shù)據(jù)庫連接失敗,錯誤:%s",mysql_error(conn));
mysql_close(conn);
return EXIT_FAILURE;
}
//字符編碼,解決亂碼
if(mysql_set_character_set(conn,"GBK")) puts("字符集設(shè)置錯誤!");
else puts("字符集設(shè)置成功!");
char query[21] = "select * from course";
if(mysql_query(conn,query)) printf("查詢失敗,錯誤:%s\n",mysql_error(conn));
else puts("查詢成功!");
MYSQL_RES* res;
res = mysql_use_result(conn);//獲取結(jié)果
MYSQL_ROW row;//設(shè)置行結(jié)果容器
while(row = mysql_fetch_row(res)){//獲取行結(jié)果
for(int t = 0;t < mysql_num_fields(res);t++)//將行結(jié)果分列輸出
printf("%s\t", row[t]);
printf("\n");
}
mysql_free_result(res);//釋放結(jié)果集
mysql_close(conn);//關(guān)閉數(shù)據(jù)庫連接
return 0;
}
柚子快報(bào)激活碼778899分享:c語言 C/C++ 連接數(shù)據(jù)庫
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。