日期:2014-05-16 浏览次数:20529 次
前一段时间给大一的学弟学妹们讲解MySQL、 随手用Java演示的怎么用外界应用程序连接MySQL数据库。但是好像他们都看不懂、而他们正好在学习C++,
于是乎、 我就简单的用C++实现了一个MySQL的链接操作类。好几个月没有怎么接触C++了、感觉这个类弄得有点四不像、 但是好歹能够运行吧。。。
此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); } // 根据各个列取出结果、未实现 }?
?