vs 中使用32 位mysql_vs2010连接mysql数据库(含win32和x64两种平台)
數據庫安裝: 此處有兩種安裝方式,第一種使用xxx.msi圖形化安裝方式,和普通的exe軟件安裝方式一樣,按照默認選項一直下一步就可以。mysql下載地址為http://dev.mysql.com/downloads/windows/installer/ 第二種是在mysql官網下載zip壓縮包,解壓開了就是一
數據庫安裝:
此處有兩種安裝方式,第一種使用xxx.msi圖形化安裝方式,和普通的exe軟件安裝方式一樣,按照默認選項一直下一步就可以。mysql下載地址為http://dev.mysql.com/downloads/windows/installer/
第二種是在mysql官網下載zip壓縮包,解壓開了就是一個文件夾。zip包下載地址為:http://dev.mysql.com/downloads/mysql/
根據自己的電腦操作系統位數選擇相應的版本,否則到時vs鏈接過不了。
本文只說明第二種安裝方式。
1.將mysql-5.6.14-winx64.zip解壓縮到C:\mysql目錄下,也可以是其它目錄,自己隨意。進入到C:\mysql\mysql-5.6.14-winx64目錄,看到有很多個.ini文件,這個就是數據庫的配置文件,不同類型的數據庫對應一個.ini文件,你可以設定端口
字符集等等,修改完了之后將文件命名為my.ini,這樣mysql server就能識別了。不過如果你沒有特殊需要,這個文件是可以不用動的,刪除了也可以,所有的配置項mysql自己都有默認值的。
2.運行欄輸入cmd,進入命令界面,cd C:\mysql\mysql-5.6.14-winx64\bin,這里放著mysqld.exe命令
將mysql增加到系統服務中:運行命令mysqld
--install 或者 mysqld --installmysql
3.啟動mysql服務端:net start mysql (必須啟動著
vs才能連接上來,要是數據庫連接失敗請查看mysql服務是否啟動)
4.使用系統管理員身份運行在命令行運行:mysql
-uroot 進入之后就可以執行相關的數據庫命令了,若只是以mysql進入,則很多命令執行不了,必須以root用戶進入,這里沒有密碼
5.不想使用數據庫了就關掉mysql服務,免得占用內存:net
stop mysql
刪除mysql服務:mysqld
--remove mysql
接下來對如何使用MySql的API連接MySql數據庫,開發環境為VS2010.
一、VS2010工程設置工作(win32下)
1.首先,建立一個windows應用程序的工程,將項目-->xx屬性(xx為自己取的名字)-->配置屬性-->C/C++->預處理器->預處理器定義下的_WINDOWS改為_CONSOLE,默認一般已經這樣了
2.鏈接器->系統->子系統 選擇為控制臺。默認已經這樣的就不用動
由于我們要使用Mysql的API,并且我們機子上肯定安裝了Mysql數據庫,所以我們要將工程的頭文件路徑指向Mysql安裝目錄的同文件mysql.h所在的位置,將連接庫路徑指向libmysql.lib所在的路徑,
在我的機子上,Mysql 的安裝路徑為:C:\mysql\mysql-5.6.14-winx64\include,C:\mysql\mysql-5.6.14-winx64\lib和下面圖片不符,自己找自己的目錄
高版本的mysql可能沒有opt這個目錄層次了,只要找到libmysql.lib這個目錄就行
我們需要把VS2008的工程中的頭文件路徑和連接庫路徑指向上面的兩個地方:
將x項目屬性頁的C/C++->常規->附加包含目錄指向:C:\mysql\mysql-5.6.14-winx64\include
將項目屬性頁的鏈接器->常規->附加庫目錄指向:C:\mysql\mysql-5.6.14-winx64\lib
將鏈接器->輸入->附加依賴項中添加libmysql.lib。
如果不設置鏈接器->輸入->附加依賴項中添加libmysql.lib,那么會出現如下的錯誤:
1>------ 已啟動全部重新生成: 項目: MySql-Connect, 配置: Debug Win32 ------
1>正在刪除項目“MySql-Connect”(配置“Debug|Win32”)的中間文件和輸出文件
1>正在編譯...
1>MySql_Connect.cpp
1>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) : 參見“scanf”的聲明
1>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) : 參見“sprintf”的聲明
1>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) : 參見“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 : 沒有找到 d:\我的文檔\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe 或上一個增量鏈接沒有生成它;正在執行完全鏈接
1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_close@4,該符號在函數 _main 中被引用1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_free_result@4,該符號在函數 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_num_fields@4,該符號在函數 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_fetch_row@4,該符號在函數 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_store_result@4,該符號在函數 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_error@4,該符號在函數 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_real_query@12,該符號在函數 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_select_db@8,該符號在函數 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_real_connect@32,該符號在函數 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 無法解析的外部符號 _mysql_init@4,該符號在函數 _main 中被引用
1>d:\我的文檔\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe : fatal error LNK1120: 10 個無法解析的外部命令
1>生成日志保存在“file://d:\我的文檔\Visual Studio 2008\Projects\MySql-Connect\MySql-Connect\Debug\BuildLog.htm”
1>MySql-Connect - 11 個錯誤,3 個警告
========== 全部重新生成: 成功 0 個,失敗 1 個,跳過 0 個 ==========
到此處,win32平臺已經配置好,可以打開vs寫代碼連接數據庫了,但是x64平臺上鏈接時總是會有以下錯誤:這是我遇到的問題
error LNK2019: 無法解析的外部符號 _mysql_real_connect@32,該符號在函數 _main 中被引用
error LNK2019: 無法解析的外部符號 _mysql_query@8,該符號在函數 _main 中被引用
error LNK2019: 無法解析的外部符號 _mysql_init@4,該符號在函數 _main 中被引用
error LNK2019: 無法解析的外部符號 _mysql_close@4,該符號在函數 _main 中被引用
后來一想我裝的是win7
64位啊,MySQL也是赤裸裸的64位,我用WIN32 項目搞毛線。于是有一個猜想就是,MySQL 64位的lib也是64位的接口。
于是:項目-->xx屬性(xx為自己取的名字)--》配置管理器-->活動解決方案平臺
下拉后點擊新建,會出現自動填寫x64,下面一欄不用動,然后將平臺改為x64,既可以完成編譯鏈接。
以下是一個簡單的例子源代碼:工程類型是最簡單的windows控制臺程序:
//
data_use.cpp : 定義控制臺應用程序的入口點。
//
#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; //數據庫連接句柄
MYSQL_RES *res;
MYSQL_ROW row;
mysql_init (&mysql);
//先要在mysql中創建出數據庫mydb和表mytable來,進入數據庫:mysql -uroot
//若只是輸入mysql進去,會執行不了創建表等命令,mysql的客戶端工具很多,可以選擇navicat
//若用c++連接數據庫,可以考慮Mysql++ ,它提供了很多封裝好的接口,避免了下面這樣的手工方式寫sql語句,這樣很容易出錯
int errorcode;
//連接數據庫
if(mysql_real_connect(&mysql,"localhost","root",NULL,"mydb",3306,NULL,0))
{
printf("connect to database successfully!\n");
//構造SQL語句
char *deleted = "delete from mytable where username='xww'";
if(errorcode = mysql_real_query(&mysql,deleted,(unsigned int)strlen(deleted)))
{
//錯誤代碼始終為1,表示false。一般情況下肯定是sql語句寫錯了,復制該sql語句到mysql命令行里面去執行一遍
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中定義的三個結構體
MYSQL
MYSQL_RES
MYSQL_ROW
一般步驟是:
1.調用mysql_init()初始化MYSQL結構,許多的函數執行需要這個結構體。
2.調用mysql_real_connect()連接數據庫,參數中涉及到數據庫名,數據庫登錄名,數據庫密碼等等。
3.調用mysql_real_query()執行一條Select SQL語句,通過mysql_store_result()的返回值獲得Select的結果,返回的結果就是一個MYSQL_RES結構的指針。
4.調用mysql_fetch_row()獲得一條記錄,函數的返回值是MYSQL_ROW對象,這是一個char二維數組。獲取一條記錄以后,mysql_fetch_row會將游標自動向下移動一條記錄。
5.調用mysql_free_result()釋放結果資源,調用mysql_close關閉連接。*/
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴
本文系統來源:php中文網
總結
以上是生活随笔為你收集整理的vs 中使用32 位mysql_vs2010连接mysql数据库(含win32和x64两种平台)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CListCtrl的用法总结
- 下一篇: 操作系统服务:logging日志记录模块