首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

C++联接MySQL数据库

2012-11-08 
C++连接MySQL数据库前一段时间给大一的学弟学妹们讲解MySQL、 随手用Java演示的怎么用外界应用程序连接MySQ

C++连接MySQL数据库

前一段时间给大一的学弟学妹们讲解MySQL、 随手用Java演示的怎么用外界应用程序连接MySQL数据库。但是好像他们都看不懂、而他们正好在学习C++,

于是乎、 我就简单的用C++实现了一个MySQL的链接操作类。好几个月没有怎么接触C++了、感觉这个类弄得有点四不像、 但是好歹能够运行吧。。。

C++联接MySQL数据库 此C++链接MySQL连接程序完成之后,发在实验室扣扣群里面,他们竟然都没有丝毫反应。。。估计大一后生们都完全听从大三学长啊、 搞得我们大二新生代情何以堪、说的话毫无威信。。。。。。

发牢骚归发牢骚、C++代码发出来,如果那些入门者想了解就可以借鉴一下、虽然程序很挫吧。入门级还是无压力的

?

?

头文件

#include <iostream>#include <winsock.h> // 连接mysql需要此头文件// MySQL Server 6.0安装位置下的include内*.h头文件用来提供C/C++连接MySQL的一下数据类型和函数// 复制include文件夹入当前工程目录下#include "include/mysql.h" using namespace std;// MySQL安装位置下的lib/opt/libmysql.lib用来提供头文件所提供函数的具体实现// 复制libmysql.lib入当前目录下#pragma comment(lib, "libmysql.lib") class Tool  {public:void resultSQL(const char* sql);void console();int executeSQL(const char* sql);void setCharset(const char* name);void connect(const char *host, const char *user, const char *passwd, const char *db, unsigned int port);Tool();virtual ~Tool();private:MYSQL mysql;// 数据库实例bool available;// 当前数据库对象是否可用标识符};

?

具体实现

#include "Tool.h"// 所有涉及mysql的函数(mysql_*(*))都可以在《mysql参考手册》的25.2小节中找到// 主要是【25.2.1. C API数据类型】【25.2.2. C API函数概述】【25.2.1. C API函数描述】Tool::Tool(){mysql_init(&mysql); // 分配并初始化MYSQL对象available = false;}Tool::~Tool(){mysql_close(&mysql); // 关闭MYSQL连接}/*host:主机名、localhost或IP地址等user:用户名、MySQL的用户名password:密码、MySQL的用户密码db:数据库名称。如果db为NULL,连接会将默认的数据库设为该值port:MySQL的链接端口*/void Tool::connect(const char *host, const char *user, const char *password, const char *db, unsigned int port){if(NULL!=mysql_real_connect(&mysql, host, user, password, db, port, NULL, 0)){available = true;cout<<"Successful connection!"<<endl;}else{cout<<"ERROR: "<<mysql_error(&mysql)<<endl;}}/* 设置连接到MySQL的字符集*/void Tool::setCharset(const char *name){mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, name);}/*可以执行表操作/增删改查/数据库操作等等sql语句执行错误返回-2如果为查询操作则返回-1如果为修改操作则返回修改影响到的行数*/int Tool::executeSQL(const char *sql){// 若valuable为false则说明MySQL连接尚不可用if(!available)return -2;// 执行指定sql操作cout<<sql<<endl;if(!mysql_real_query(&mysql, sql, strlen(sql))){// mysql_real_query函数执行结果为0则说明操作成功,返回影响的行数return (int)mysql_affected_rows(&mysql); }else{// 如果操作失败则输出错误信息cout<<mysql_error(&mysql)<<endl; return -2;}}void Tool::console(){if(!available)return;/*简单模拟MySQL控制台、未实现原理:重复读取输入字符串+执行executeSQL/resultSQL方法*/}void Tool::resultSQL(const char *sql){if(executeSQL(sql) != -1)return;// 此处基本上不可能出现result为NULL的情况MYSQL_RES * result = mysql_store_result(&mysql);MYSQL_FIELD *field;while((field = mysql_fetch_field(result))) {printf("field name:  %s\n", field->name);}// 根据各个列取出结果、未实现}
?

?

热点排行