vs 中使用32 位mysql_vs2010连接mysql数据库(含win32和x64两种平台)
數(shù)據(jù)庫(kù)安裝: 此處有兩種安裝方式,第一種使用xxx.msi圖形化安裝方式,和普通的exe軟件安裝方式一樣,按照默認(rèn)選項(xiàng)一直下一步就可以。mysql下載地址為http://dev.mysql.com/downloads/windows/installer/ 第二種是在mysql官網(wǎng)下載zip壓縮包,解壓開(kāi)了就是一
數(shù)據(jù)庫(kù)安裝:
此處有兩種安裝方式,第一種使用xxx.msi圖形化安裝方式,和普通的exe軟件安裝方式一樣,按照默認(rèn)選項(xiàng)一直下一步就可以。mysql下載地址為http://dev.mysql.com/downloads/windows/installer/
第二種是在mysql官網(wǎng)下載zip壓縮包,解壓開(kāi)了就是一個(gè)文件夾。zip包下載地址為:http://dev.mysql.com/downloads/mysql/
根據(jù)自己的電腦操作系統(tǒng)位數(shù)選擇相應(yīng)的版本,否則到時(shí)vs鏈接過(guò)不了。
本文只說(shuō)明第二種安裝方式。
1.將mysql-5.6.14-winx64.zip解壓縮到C:\mysql目錄下,也可以是其它目錄,自己隨意。進(jìn)入到C:\mysql\mysql-5.6.14-winx64目錄,看到有很多個(gè).ini文件,這個(gè)就是數(shù)據(jù)庫(kù)的配置文件,不同類型的數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè).ini文件,你可以設(shè)定端口
字符集等等,修改完了之后將文件命名為my.ini,這樣mysql server就能識(shí)別了。不過(guò)如果你沒(méi)有特殊需要,這個(gè)文件是可以不用動(dòng)的,刪除了也可以,所有的配置項(xiàng)mysql自己都有默認(rèn)值的。
2.運(yùn)行欄輸入cmd,進(jìn)入命令界面,cd C:\mysql\mysql-5.6.14-winx64\bin,這里放著mysqld.exe命令
將mysql增加到系統(tǒng)服務(wù)中:運(yùn)行命令mysqld
--install 或者 mysqld --installmysql
3.啟動(dòng)mysql服務(wù)端:net start mysql (必須啟動(dòng)著
vs才能連接上來(lái),要是數(shù)據(jù)庫(kù)連接失敗請(qǐng)查看mysql服務(wù)是否啟動(dòng))
4.使用系統(tǒng)管理員身份運(yùn)行在命令行運(yùn)行:mysql
-uroot 進(jìn)入之后就可以執(zhí)行相關(guān)的數(shù)據(jù)庫(kù)命令了,若只是以mysql進(jìn)入,則很多命令執(zhí)行不了,必須以root用戶進(jìn)入,這里沒(méi)有密碼
5.不想使用數(shù)據(jù)庫(kù)了就關(guān)掉mysql服務(wù),免得占用內(nèi)存:net
stop mysql
刪除mysql服務(wù):mysqld
--remove mysql
接下來(lái)對(duì)如何使用MySql的API連接MySql數(shù)據(jù)庫(kù),開(kāi)發(fā)環(huán)境為VS2010.
一、VS2010工程設(shè)置工作(win32下)
1.首先,建立一個(gè)windows應(yīng)用程序的工程,將項(xiàng)目-->xx屬性(xx為自己取的名字)-->配置屬性-->C/C++->預(yù)處理器->預(yù)處理器定義下的_WINDOWS改為_(kāi)CONSOLE,默認(rèn)一般已經(jīng)這樣了
2.鏈接器->系統(tǒng)->子系統(tǒng) 選擇為控制臺(tái)。默認(rèn)已經(jīng)這樣的就不用動(dòng)
由于我們要使用Mysql的API,并且我們機(jī)子上肯定安裝了Mysql數(shù)據(jù)庫(kù),所以我們要將工程的頭文件路徑指向Mysql安裝目錄的同文件mysql.h所在的位置,將連接庫(kù)路徑指向libmysql.lib所在的路徑,
在我的機(jī)子上,Mysql 的安裝路徑為:C:\mysql\mysql-5.6.14-winx64\include,C:\mysql\mysql-5.6.14-winx64\lib和下面圖片不符,自己找自己的目錄
高版本的mysql可能沒(méi)有opt這個(gè)目錄層次了,只要找到libmysql.lib這個(gè)目錄就行
我們需要把VS2008的工程中的頭文件路徑和連接庫(kù)路徑指向上面的兩個(gè)地方:
將x項(xiàng)目屬性頁(yè)的C/C++->常規(guī)->附加包含目錄指向:C:\mysql\mysql-5.6.14-winx64\include
將項(xiàng)目屬性頁(yè)的鏈接器->常規(guī)->附加庫(kù)目錄指向:C:\mysql\mysql-5.6.14-winx64\lib
將鏈接器->輸入->附加依賴項(xiàng)中添加libmysql.lib。
如果不設(shè)置鏈接器->輸入->附加依賴項(xiàng)中添加libmysql.lib,那么會(huì)出現(xiàn)如下的錯(cuò)誤:
1>------ 已啟動(dòng)全部重新生成: 項(xiàng)目: MySql-Connect, 配置: Debug Win32 ------
1>正在刪除項(xiàng)目“MySql-Connect”(配置“Debug|Win32”)的中間文件和輸出文件
1>正在編譯...
1>MySql_Connect.cpp
1>x:\編程練習(xí)\c-c++\c\mysql_connect.cpp(35) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 參見(jiàn)“scanf”的聲明
1>x:\編程練習(xí)\c-c++\c\mysql_connect.cpp(72) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 參見(jiàn)“sprintf”的聲明
1>x:\編程練習(xí)\c-c++\c\mysql_connect.cpp(86) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 參見(jiàn)“sprintf”的聲明
1>正在編譯資源清單...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>正在鏈接...
1>LINK : 沒(méi)有找到 d:\我的文檔\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe 或上一個(gè)增量鏈接沒(méi)有生成它;正在執(zhí)行完全鏈接
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_close@4,該符號(hào)在函數(shù) _main 中被引用1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_free_result@4,該符號(hào)在函數(shù) _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_num_fields@4,該符號(hào)在函數(shù) _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_fetch_row@4,該符號(hào)在函數(shù) _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_store_result@4,該符號(hào)在函數(shù) _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_error@4,該符號(hào)在函數(shù) _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_real_query@12,該符號(hào)在函數(shù) _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_select_db@8,該符號(hào)在函數(shù) _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_real_connect@32,該符號(hào)在函數(shù) _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_init@4,該符號(hào)在函數(shù) _main 中被引用
1>d:\我的文檔\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe : fatal error LNK1120: 10 個(gè)無(wú)法解析的外部命令
1>生成日志保存在“file://d:\我的文檔\Visual Studio 2008\Projects\MySql-Connect\MySql-Connect\Debug\BuildLog.htm”
1>MySql-Connect - 11 個(gè)錯(cuò)誤,3 個(gè)警告
========== 全部重新生成: 成功 0 個(gè),失敗 1 個(gè),跳過(guò) 0 個(gè) ==========
到此處,win32平臺(tái)已經(jīng)配置好,可以打開(kāi)vs寫代碼連接數(shù)據(jù)庫(kù)了,但是x64平臺(tái)上鏈接時(shí)總是會(huì)有以下錯(cuò)誤:這是我遇到的問(wèn)題
error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_real_connect@32,該符號(hào)在函數(shù) _main 中被引用
error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_query@8,該符號(hào)在函數(shù) _main 中被引用
error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_init@4,該符號(hào)在函數(shù) _main 中被引用
error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_close@4,該符號(hào)在函數(shù) _main 中被引用
后來(lái)一想我裝的是win7
64位啊,MySQL也是赤裸裸的64位,我用WIN32 項(xiàng)目搞毛線。于是有一個(gè)猜想就是,MySQL 64位的lib也是64位的接口。
于是:項(xiàng)目-->xx屬性(xx為自己取的名字)--》配置管理器-->活動(dòng)解決方案平臺(tái)
下拉后點(diǎn)擊新建,會(huì)出現(xiàn)自動(dòng)填寫x64,下面一欄不用動(dòng),然后將平臺(tái)改為x64,既可以完成編譯鏈接。
以下是一個(gè)簡(jiǎn)單的例子源代碼:工程類型是最簡(jiǎn)單的windows控制臺(tái)程序:
//
data_use.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
#include "stdafx.h"
#include #include #include #include #pragma comment (lib, "libmysql.lib")
#pragma comment (lib, "mysqlclient.lib")
int main(int argc, _TCHAR* argv[])
{
MYSQL mysql; //數(shù)據(jù)庫(kù)連接句柄
MYSQL_RES *res;
MYSQL_ROW row;
mysql_init (&mysql);
//先要在mysql中創(chuàng)建出數(shù)據(jù)庫(kù)mydb和表mytable來(lái),進(jìn)入數(shù)據(jù)庫(kù):mysql -uroot
//若只是輸入mysql進(jìn)去,會(huì)執(zhí)行不了創(chuàng)建表等命令,mysql的客戶端工具很多,可以選擇navicat
//若用c++連接數(shù)據(jù)庫(kù),可以考慮Mysql++ ,它提供了很多封裝好的接口,避免了下面這樣的手工方式寫sql語(yǔ)句,這樣很容易出錯(cuò)
int errorcode;
//連接數(shù)據(jù)庫(kù)
if(mysql_real_connect(&mysql,"localhost","root",NULL,"mydb",3306,NULL,0))
{
printf("connect to database successfully!\n");
//構(gòu)造SQL語(yǔ)句
char *deleted = "delete from mytable where username='xww'";
if(errorcode = mysql_real_query(&mysql,deleted,(unsigned int)strlen(deleted)))
{
//錯(cuò)誤代碼始終為1,表示false。一般情況下肯定是sql語(yǔ)句寫錯(cuò)了,復(fù)制該sql語(yǔ)句到mysql命令行里面去執(zhí)行一遍
printf("deleted fails. error code is %d \n",errorcode);
}
char *insert = "insert into mytable(username,visitelist,remark)values('xww','hz','s')";
if(mysql_real_query(&mysql,insert,(unsigned int)strlen(insert)))
{
printf("insert fails\n");
}
char *query = "select * from mytable";
if(errorcode = mysql_real_query(&mysql,query,(unsigned int)strlen(query)))
{
printf("query fails,errorcode is %d\n",errorcode);
}
else
{
printf("[%s] result is:\n", query);
res = mysql_store_result(&mysql);
while(row = mysql_fetch_row(res))
{
for(int t=0;t{
printf("%s ",row[t]);
}
printf("\n");
}
}
}
else
{
printf("connect to sql fail!\n");
}
return 0;
}
/*用到以下mysql的API:
mysql_init()
mysql_real_connect()
mysql_real_query()
mysql_store_result()
mysql_fetch_row()
mysql_free_result()
mysql_close()
操作中需要用到mysql中定義的三個(gè)結(jié)構(gòu)體
MYSQL
MYSQL_RES
MYSQL_ROW
一般步驟是:
1.調(diào)用mysql_init()初始化MYSQL結(jié)構(gòu),許多的函數(shù)執(zhí)行需要這個(gè)結(jié)構(gòu)體。
2.調(diào)用mysql_real_connect()連接數(shù)據(jù)庫(kù),參數(shù)中涉及到數(shù)據(jù)庫(kù)名,數(shù)據(jù)庫(kù)登錄名,數(shù)據(jù)庫(kù)密碼等等。
3.調(diào)用mysql_real_query()執(zhí)行一條Select SQL語(yǔ)句,通過(guò)mysql_store_result()的返回值獲得Select的結(jié)果,返回的結(jié)果就是一個(gè)MYSQL_RES結(jié)構(gòu)的指針。
4.調(diào)用mysql_fetch_row()獲得一條記錄,函數(shù)的返回值是MYSQL_ROW對(duì)象,這是一個(gè)char二維數(shù)組。獲取一條記錄以后,mysql_fetch_row會(huì)將游標(biāo)自動(dòng)向下移動(dòng)一條記錄。
5.調(diào)用mysql_free_result()釋放結(jié)果資源,調(diào)用mysql_close關(guān)閉連接。*/
本條技術(shù)文章來(lái)源于互聯(lián)網(wǎng),如果無(wú)意侵犯您的權(quán)益請(qǐng)點(diǎn)擊此處反饋版權(quán)投訴
本文系統(tǒng)來(lái)源:php中文網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的vs 中使用32 位mysql_vs2010连接mysql数据库(含win32和x64两种平台)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CListCtrl的用法总结
- 下一篇: mysql 与 xls 连接_数据库My