C++连接MySQL(Windows)
一般来说,VS下采用微软自身的SQL Server是比较常见的做法,但SQL Server只适合学习,不适合真正应用。在此,我们选择MySQL作为后台数据库。C++语言本身并没有提供访问数据库的东西,一般使用访问数据库的驱动。微软提供一个ODBC的标准API,用于屏蔽各数据库底层细节,提供统一接口访问各个数据库。在MySQL官网上也能下到一个叫"Connector/ODBC"的driver,但"Connector/C++"的driver应该比ODBC要效率高些。
下载并安装以下软件(官网下载)
- MySQL Connector:mysql-connector-c++-1.1.4-win32.msi
- MySQL Server:mysql-5.1.73-win32.msi
- MySQL Workbench:mysql-workbench-community-6.2.3-win32.msi(可视化组件,不推荐)
说明:
- MySQL官网:http://www.mysql.com;
- MySQL Connector是C++连接数据库的引擎,起着C++和数据库之间桥梁的作用;MySQL Server即MySQL服务器;MySQL Workbench为MySQL的可视化组件,个人感觉不太好用,可使用Navicat for MySQL或者phpMyAdmin(不错哦);
- 强烈推荐:C++的MySQL数据库连接引擎使用MySQL官网的MySQL Connector,MySQL服务器和可视化组件使用WampServer(Windows);
测试(使用)MySQL
在“运行”中输入cmd,打开命令行窗口(或点击“开始”->MySQL->MySQL 5.1->MySQL Command Line Client),输入如下命令,再输入密码(默认密码为空),即可进入MySql;
mysql -u root -p
查看当前已有的数据库:
mysql> show databases;
创建数据库:
mysql> create database DBName;
使用数据库(这句不能加分号):
mysql> use DBName
查看已有的表:
mysql> show tables;
创建表:
mysql> create table TableName( id INT, name CHAR(20));
插入数据:
mysql> insert into TableName(id, name) values(1001, 'google'); mysql> insert into TableName(id, name) values(1002, 'kingsoft'); mysql> insert into TableName(id, name) values(1003, 'firefox');
说明:
- SQL语句末尾加上';'表示立即执行当前语句;
- 对数据库的操作无非四种:增、删、改、查;
常用MySQL命令:
//查看MySQL版本 mysql> select version(); //显示所有数据库 mysql> show databases; //使用数据库 mysql> use database_name; //显示所有数据表 mysql> show tables; //显示数据表结构 mysql> describe table_name; //创建数据库 mysql> create database database_name; //删除数据库 mysql> drop database database_name; //创建数据表 mysql> use database_name; mysql> create table table_name (字段名 VARCHAR(20), 字段名 CHAR(1)); //删除数据表 mysql> drop table table_name; //查询记录 mysql> select * from table_name; //导入.sql文件 mysql> use database_name; mysql> source c:/mysql.sql //修改root密码 mysql> UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root'; //退出 mysql> quit
用VS2010新建一个控制台项目,并配置其属性:
1、配置属性-->C/C++-->常规-->附加包含目录:
C:\Program Files (x86)\MySQL\MySQL Connector C++ 1.1.4\include;C:\Program Files (x86)\MySQL\MySQL Connector C++ 1.1.4\include\cppconn;
2、配置属性-->链接器-->常规-->附加库目录:
C:\Program Files (x86)\MySQL\MySQL Connector C++ 1.1.4\lib\opt;C:\Program Files (x86)\MySQL\MySQL Connector C++ 1.1.4\lib\debug;
3、配置属性-->链接器-->输入-->附加依赖项:
mysqlcppconn.lib;mysqlcppconn-static.lib
4、将C:\Program Files (x86)\MySQL\MySQL Connector C++ 1.1.4\lib\opt下的mysqlcppconn.dll文件复制到系统驱动盘windows\system32目录下
为项目源文件添加源代码:
#include <iostream> #include <mysql_driver.h> #include <mysql_connection.h> #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> #include <cppconn/prepared_statement.h> using namespace sql; using namespace std; void RunConnectMySQL() { mysql::MySQL_Driver *driver; Connection *con; Statement *state; ResultSet *result; // 初始化驱动 driver = sql::mysql::get_mysql_driver_instance(); // 建立链接 con = driver->connect("tcp://127.0.0.1:3306", "root", ""); state = con->createStatement(); state->execute("use DBName"); // 查询 result = state->executeQuery("select * from TableName ");//where id < 1006 // 输出查询 while(result->next()) { int id = result->getInt("ID"); string name = result->getString("name"); cout << id << " : "<< name << endl; } delete state; delete con; } int main() { RunConnectMySQL(); getchar(); return 0; }
编译并运行,结果如下:
注:编译时可能遇到有关Boost的错误,这时还要配置Boost库,请参考:http://www.cnblogs.com/gaohongchen01/p/4006920.html
MySQL插入变量代码:
//增加记录 short int num=10; //char string[10]; char sqlstring[500]; while(num--) { //itoa(num,string,10); sprintf(sqlstring,"insert into test1 values(\"%d\",\"M\")",num); state->executeUpdate(sqlstring); }
五、Data Modeling
使用MySQL Workbench的Data Modeling的open existing EER model来打开数据库实例sakila中的sakila.mwb文件,如下图:
通常,我们使用MySQL Workbench的Data Modeling从建模开始来设计数据库,在建模完成后导出为sql语句,然后再将sql导入到数据库,来完成数据库的创建。
注:EER=Extended Entity-Relationship,即扩展实体-关系模型,是当前最新的一种数据库模型。
高洪臣 (Gavin Gao)
cggos@outlook.com
=======================================================================