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