vs2008 C++项目连接mysql数据库详解

这两天由于写程序需要,须将c++程序中的数据存储在mysql数据库中,因此在网上各种找资料,终于弄清楚了整个流程。今天抽出点时间整理,方便自己,同时和各位分享。有错误的地方,请积极批评指正!

第一步:安装MySQL5.5(下载地址:http://dev.mysql.com/downloads/mysql/)

这里给出安装MySQL5.1的流程图解,5.5安装类似。

一、MySQL5.1安装

打开下载的安装文件,出现如下界面:


mysql安装向导启动,点击“next”继续

选择安装类型,有“Typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项,我们选择“Custom”,有更多的选项,也方便熟悉安装过程。

在“MySQL Server(MySQL服务器)”上左键单击,选择“This feature, and all subfeatures, will beinstalled on local hard drive.”,即“此部分,及下属子部分内容,全部安装在本地硬盘上”。点选“Change...”,手动指定安装目录。

填上安装目录,例如“F:MySQL”,也建议不要放在与操作系统同一分区,这样可以防止系统备份还原的时候,数据被清空。按“OK”继续。


按“Install”开始安装。

正在安装中,请稍候,直到出现下面的界面。

点击“next”继续,出现如下界面。


现在软件安装完成了,出现上面的界面,这里有一个很好的功能,mysql 配置向导,不用向以前一样,自己手动乱七八糟的配置my.ini 了,将“Configure the Mysql Server now”前面的勾打上,点“Finish”结束软件的安装并启动mysql配置向导。

二、配置MySQL Server

      点击“Finsh”,出现如下界面,MySQL Server配置向导启动。

点击“next”出现如下界面,

选择配置方式,“Detailed Configuration(手动精确配置)”、“Standard Configuration(标准配置)”,我们选择“Detailed Configuration”,方便熟悉配置过程。

选择服务器类型,“Developer Machine(开发测试类,mysql 占用很少资源)”、“Server Machine(服务器类型,mysql占用较多资源)”、“Dedicated MySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)”,大家根据自己的类型选择了,一般选“Server Machine”,不会太少,也不会占满。

选择mysql数据库的大致用途,“Multifunctional Database(通用多功能型,好)”、“TransactionalDatabase Only(服务器类型,专注于事务处理,一般)”、“Non-Transactional Database Only(非事务处理型,较简单,主要做一些监控、记数用,对MyISAM数据类型的支持仅限于non-transactional),随自己的用途而选择了,我这里选择“Transactional Database Only”,按“Next”继续。

对InnoDB Tablespace进行配置,就是为InnoDB 数据库文件选择一个存储空间,如果修改了,要记住位置,重装的时候要选择一样的地方,否则可能会造成数据库损坏,当然,对数据库做个备份就没问题了,这里不详述。我这里没有修改,使用默认位置,直接按“Next”继续。

选择您的网站的一般mysql 访问量,同时连接的数目,“Decision Support(DSS)/OLAP(20个左右)”、“Online Transaction Processing(OLTP)(500个左右)”、“Manual Setting(手动设置,自己输一个数)”,我这里选“Online Transaction Processing(OLTP)”,自己的服务器,应该够用了,按“Next”继续。

是否启用TCP/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql 数据库了,我这里启用,把前面的勾打上,Port Number:3306,在这个页面上,您还可以选择“启用标准模式”(Enable StrictMode),这样MySQL就不会允许细小的语法错误。如果您还是个新手,我建议您取消标准模式以减少麻烦。但熟悉MySQL以后,尽量使用标准模式,因为它可以降低有害数据进入数据库的可能性。还有一个关于防火墙的设置“Add firewall exception ……”需要选中,将MYSQL服务的监听端口加为windows防火墙例外,避免防火墙阻断。按“Next”继续。

注意:如果要用原来数据库的数据,最好能确定原来数据库用的是什么编码,如果这里设置的编码和原来数据库数据的编码不一致,在使用的时候可能会出现乱码。

这个比较重要,就是对mysql默认数据库语言编码进行设置,第一个是西文编码,第二个是多字节的通用utf8编码,都不是我们通用的编码,这里选择第三个,然后在Character Set 那里选择或填入“gbk”,当然也可以用“gb2312”,区别就是gbk的字库容量大,包括了gb2312的所有汉字,并且加上了繁体字、和其它乱七八糟的字——使用mysql 的时候,在执行数据操作命令之前运行一次“SET NAMES GBK;”(运行一次就行了,GBK可以替换为其它值,视这里的设置而定),就可以正常的使用汉字(或其它文字)了,否则不能正常显示汉字。按“Next”继续。


选择是否将mysql 安装为windows服务,还可以指定Service Name(服务标识名称),是否将mysql的bin目录加入到Windows PATH(加入后,就可以直接使用bin下的文件,而不用指出目录名,比如连接,“mysql.exe -uusername -ppassword;”就可以了,不用指出mysql.exe的完整地址,很方便),我这里全部打上了勾,Service Name不变。按“Next”继续。

这一步询问是否要修改默认root 用户(超级管理)的密码(默认为空),“New root password”如果要修改,就在此填入新密码(如果是重装,并且之前已经设置了密码,在这里更改密码可能会出错,请留空,并将“Modify Security Settings”前面的勾去掉,安装配置完成后另行修改密码),“Confirm(再输一遍)”内再填一次,防止输错。“Enable root access from remotemachines(是否允许root 用户在其它的机器上登陆,如果要安全,就不要勾上,如果要方便,就勾上它)”。最后“Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据库,不能操作数据,包括查询)”,一般就不用勾了,设置完毕,按“Next”继续。

确认设置无误,如果有误,按“Back”返回检查。按“Execute”使设置生效。

      设置完毕,按“Finish”结束mysql的安装与配置——这里有一个比较常见的错误,就是不能“Startservice”,一般出现在以前有安装mysql 的服务器上,解决的办法,先保证以前安装的mysql 服务器彻底卸载掉了;不行的话,检查是否按上面一步所说,之前的密码是否有修改,照上面的操作;如果依然不行,将mysql 安装目录下的data文件夹备份,然后删除,在安装完成后,将安装生成的data文件夹删除,备份的data文件夹移回来,再重启mysql 服务就可以了,这种情况下,可能需要将数据库检查一下,然后修复一次,防止数据出错。

三、说明

        本文所涉及内容均可以在MySQL参考手册第二章“安装MySQL”中找到。MySQL参考手册地址

http://dev.mysql.com/doc/refman/5.1/zh/index.html。mysql的下载地址:http://dev.mysql.com/downloads/mysql/5.1.html


第二步:安装MySQL Connector C++ 1.1.1(http://dev.mysql.com/downloads/connector/cpp/)

安装时注意选择“完全安装”,否则只安装release版链接库,没有debug版

 简单说明下安装后的库文件:
 1.mysqlcppconn.lib 为动态链接库,发布时需要带上mysqlcppconn.dll
 2.mysqlcppconn-static.lib 为静态链接库,发布时不需要mysqlcppconn.dll
 注意,上面两个链接库都是动态链接到libmysql.lib的,所以不管用的上述哪种链接,发布时都需要libmysql.dll
 另外,如果是C开发而不是C++,可以直接使用mysql安装目录下的include和lib\libmysql.lib进行开发,不需要任Connector


 第三步:安装boost库(http://sourceforge.net/projects/boost/files/boost/1.51.0/)。


第四步:配置环境

1.在第二步中下载 mysql针对c++的connector. 是一个zip 包。安装后会在 MySQL 的安装目录下产生一个MySQL Connector C++ 1.1.1的包,里面有include和lib两个文件夹。
2. vs2008 中新建一个win32 console项目,右击项目,选择属性。
找到 配置属性--->c/c++----->常规----->附加包含目录    添加要包含的目录,这里选择上面安装后的include和lib两个文件夹.还有C:\boost_1_51_0
找到 配置属性--->链接器----->常规----->附加库目录   添加要包含的目录,这里选择上面安装后的lib/opt文件夹.
找到 配置属性--->链接器----->输入----->附加依赖项   添加依赖项:mysqlcppconn.lib mysqlcppconn-static.lib
3. C:/Program Files/MySQL/MySQL Server 5.0/bin/libmySQL.dll  复制到system32下。
4. C:/Program Files/MySQL/MySQL Connector C++ 1.0.5/lib/opt/mysqlcppconn.dll  复制到system32下。
5. 测试的时候请在realease 模式下运行。


测试代码:

[cpp]  view plain copy
  1. // TestMysql.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3. #include "stdafx.h"  
  4. #include "iostream"  
  5. #include <mysql_connection.h>  
  6. #include <cppconn/driver.h>  
  7. #include <cppconn/exception.h>  
  8. #include <cppconn/resultset.h>  
  9. #include <cppconn/statement.h>  
  10. using namespace std;  
  11. int _tmain(int argc, _TCHAR* argv[])  
  12. {  
  13.     try {  
  14.       sql::Driver *driver;  
  15.       sql::Connection *con;  
  16.       sql::Statement *stmt;  
  17.       sql::ResultSet *res;  
  18.       /* Create a connection */  
  19.       driver = get_driver_instance();  
  20.       //连接数据库  
  21.       con = driver->connect("tcp://127.0.0.1:3306""root""root");  
  22.       /* Connect to the MySQL sj database */  
  23.       //选择要连接的数据库  
  24.       con->setSchema("sj");  
  25.       //新建一个执行语句  
  26.       stmt = con->createStatement();  
  27.       //执行语句并返回结果集  
  28.       res = stmt->executeQuery("SELECT * from user");  
  29.       //遍历结果集  
  30.       while (res->next())   
  31.       {  
  32.         //这里的ID是user表中的字段名  
  33.         cout << res->getString("id") << endl;  
  34.       }  
  35.       //读取一个字符,目的是让CMD窗口停留,查看输出信息。  
  36.       getchar();  
  37.       delete res;  
  38.       delete stmt;  
  39.       delete con;  
  40.     } catch (sql::SQLException &e) {  
  41.       //有异常的情况下,输出异常  
  42.       cout << "# ERR: SQLException in " << __FILE__;  
  43.       cout << "(" << __FUNCTION__ << ") on line "   
  44.          << __LINE__ << endl;  
  45.       cout << "# ERR: " << e.what();  
  46.       cout << " (MySQL error code: " << e.getErrorCode();  
  47.       cout << ", SQLState: " << e.getSQLState() << " )" << endl;  
  48.     }  
  49.     return EXIT_SUCCESS;  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值