MySQL - MySQL++在c++11环境下接口设计
安装官方提供的mysqlconnect后,可以使用mysql++库,在官方的C API上再次做一个c++面向对象封装。
这里mysql++的安装依赖于mysql-connector-c。安装参考:http://dev.mysql.com/doc/connector-c/en/connector-c-installation-source-unix.html
c++11下注意:
1.由于mysql++并没有采用c++11,所以在使用的时候报了一些警告,需要对源码进行修改。
2.在获取字段类型的API在g++编译器下不是非常理想
3.执行sql存在错误时,系统会coredump,注意try语句的使用
下面部分代码:
- #pragma once
- #include "mysql++.h"
- #define MYSQL_CFG_FILE "..//..//common//MySQL//config.json"
- typedef struct mysql_config
- {
- std::string ip;
- int port;
- std::string user;
- std::string passwd;
- std::string database_name;
- }mysql_cfg;
- typedef struct mysql_field_information
- {
- std::string Field;
- std::string Type;
- std::string Null;
- std::string Key;
- std::string Default;
- std::string Extra;
- }mysql_field_info;
- typedef std::vector<mysql_field_info> mysql_table_info;
- typedef struct mysql_field_data
- {
- short SHORT;
- int INTEGER;
- long long BIGINT;
- float FLOAT;
- double DOUBLE;
- std::string DATETIME;
- std::string VARCHAR;
- }mysql_field;
- typedef std::map<std::string, std::vector<mysql_field>> mysql_table;
- enum mysql_database_info
- {
- SHOW_VERISON,
- SHOW_DATABASES,
- SHOW_TABLES
- };
- class DMMySQL
- {
- public:
- DMMySQL();
- ~DMMySQL();
- void show_databases_info(int flag, std::vector<std::string>& databases);
- bool get_table_desc(std::string table_name, mysql_table_info& table_info);
- bool insert_mysql(std::string sql);
- bool insert_mysql(std::string table_name, std::map<std::string, std::string>& insert_data);
- bool update_mysql(std::string sql);
- bool update_mysql(std::string table_name, std::string field_name, std::string field_value,
- std::string filter_key, std::string filter_value);
- bool select_mysql(std::string table_name, mysql_table& table_data);
- bool select_mysql(std::string table_name, std::string field_name, std::vector<mysql_field>& field_data);
- bool select_mysql(std::string table_name, std::string field_name,
- std::string filter_key, std::string filter_value,
- std::vector<mysql_field>& field_data, std::string filter_opt = "=");
- private:
- bool load_mysql_config();
- void init();
- bool conncet_mysql();
- void disconnect_mysql();
- void trans_data_type(std::string input_data, std::string data_type, mysql_field& field_data);
- private:
- mysql_cfg _mysql_cfg;
- mysqlpp::Connection _conn;
- };
- #include "json/json.h"
- #include <fstream>
- #include <ace/Log_Msg.h>
- #include "DMMySQL.h"
- #include <cxxabi.h>
- #define TRY_SQL \
- try{
- #define CATCH_SQL_ERROR \
- }\
- catch(const mysqlpp::BadQuery& error)\
- {\
- ACE_DEBUG((LM_ERROR,"MySQL Query error:%s!\n",error.what()));\
- return false;\
- }\
- catch (const mysqlpp::BadConversion& error)\
- {\
- ACE_DEBUG((LM_ERROR,"MySQL Conversion error:%s!\n",error.what()));\
- return false;\
- }\
- catch (const mysqlpp::Exception& error)\
- {\
- ACE_DEBUG((LM_ERROR,"MySQL Exception error:%s!\n",error.what()));\
- return false;\
- }
- DMMySQL::DMMySQL()
- {
- init();
- }
- DMMySQL::~DMMySQL()
- {
- disconnect_mysql();
- }
- bool DMMySQL::load_mysql_config()
- {
- std::ifstream cfg_file;
- cfg_file.open(MYSQL_CFG_FILE, std::ios::binary);
- if (!cfg_file.is_open())
- {
- return ;
- }
- Json::Reader Reader;
- Json::Value Root;
- if (Reader.parse(cfg_file,Root))
- {
- _mysql_cfg.ip = Root["mysql_ip"].asString();
- _mysql_cfg.port = Root["mysql_port"].asInt();
- _mysql_cfg.user = Root["mysql_user"].asString();
- _mysql_cfg.passwd = Root["mysql_passwd"].asString();
- _mysql_cfg.database_name = Root["database_name"].asString();
- }
- else
- {
- ACE_DEBUG((LM_ERROR,"parse mysql config file failure!\n"));
- return false;
- }
- return true;
- }
- void DMMySQL::init()
- {
- if (load_mysql_config())
- {
- conncet_mysql();
- }
- }
- bool DMMySQL::conncet_mysql()
- {
- if (!_conn.connect(_mysql_cfg.database_name.c_str(), _mysql_cfg.ip.c_str(),
- _mysql_cfg.user.c_str(), _mysql_cfg.passwd.c_str(), _mysql_cfg.port))
- {
- ACE_DEBUG((LM_ERROR,"connect MySQL database failure!\n"));
- return false;
- }
- return true;
- }
- void DMMySQL::show_databases_info(int flag, std::vector<std::string>& databases)
- {
- std::string opration;
- switch (flag)
- {
- case SHOW_VERISON:
- {
- std::string version_info = _conn.client_version();
- databases.push_back(version_info);
- return;
- }
- case SHOW_DATABASES:
- {
- opration = "show databases";
- break;
- }
- case SHOW_TABLES:
- {
- opration = "show tables";
- break;
- }
- default:
- {
- return;
- }
- }
- mysqlpp::Query query = _conn.query(opration);
- if (mysqlpp::StoreQueryResult res = query.store())
- {
- mysqlpp::StoreQueryResult::iterator rit;
- for (rit = res.begin(); rit != res.end(); ++rit)
- {
- databases.push_back((*rit)[].c_str());
- }
- }
- }
- bool DMMySQL::get_table_desc(std::string table_name, mysql_table_info& tbl_info)
- {
- TRY_SQL
- std::string opration = "describe " + table_name;
- mysqlpp::Query query = _conn.query(opration);
- mysqlpp::StoreQueryResult res = query.store();
- int field_num = res.size();
- for (int i = ; i < field_num; ++i)
- {
- mysql_field_info field_i;
- field_i.Field = res[i]["field"].c_str();
- field_i.Type = res[i]["type"].c_str();
- field_i.Null = res[i]["null"].c_str();
- field_i.Key = res[i]["key"].c_str();
- field_i.Default = res[i]["default"].c_str();
- field_i.Extra = res[i]["extra"].c_str();
- tbl_info.push_back(field_i);
- }
- CATCH_SQL_ERROR
- return true;
- }
- void DMMySQL::disconnect_mysql()
- {
- _conn.disconnect();
- }
- bool DMMySQL::insert_mysql(std::string sql)
- {
- TRY_SQL
- mysqlpp::Query query = _conn.query(sql);
- query.execute();
- CATCH_SQL_ERROR
- return true;
- }
完整代码参考:https://github.com/binchen-china/DMServer
MySQL - MySQL++在c++11环境下接口设计的更多相关文章
- (1)MySQL进阶篇在linux环境下安装
1.概述 对于mysql二进制安装,优点是可以安装到任何路径下,灵活性好,一台服务器可以安装多个mysql.缺点是已经编译过,性能不如源码编译得好,不能灵活定制编译参数.如果用户即不想安装最简单却不够 ...
- C++ 11可变参数接口设计在模板编程中应用的一点点总结
概述 本人对模板编程的应用并非很深,若要用一句话总结我个人对模板编程的理解,我想说的是:模板编程是对类定义的弱化. 如何理解“类定义的弱化”? 一个完整的类有如下几部分组成: 类的名称: 类的成员变量 ...
- 2018.11.30 zsh: command not found: mysql 的解决办法mac环境下
系统环境变量的问题.解决办法: 1.打开终端.输入open .zshrc 会出现一个可编辑文档, 2.找到# User configuration部分,在下一行添加source ~/.bash_pro ...
- 安装mysql到服务器的linux环境下
1·安装mysql 命令:yum -y install httpd php mysql mysql-server 2·配置mysql 配置开机启动服务 /sbin/chkconfig --add my ...
- axios无法在ie9,10,11环境下运行的问题解决
npm install es6-promise --save-dev import promise from 'es6-promise'; promise.polyfill();
- Windows环境下Mysql 5.7读写分离之使用mysql-proxy练习篇
本文使用mysql-proxy软件,结合mysql读写分离,实现实战练习. 前期准备: 三台机器: 代理机,IP:192.168.3.33 mysql Master,IP:192.168.3.32 m ...
- 生产环境下lnmp的权限说明
https://www.cnblogs.com/zrp2013/p/4183546.html 有关权限说明:-rwxrw-r‐-1 root root 1213 Feb 2 09:39 50.html ...
- MySQL主从环境下存储过程,函数,触发器,事件的复制情况
下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...
- 【Data Cluster】真机环境下MySQL数据库集群搭建
真机环境下MySQL-Cluster搭建文档 摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建.购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建.起初笔 ...
随机推荐
- 数组中的toString,toLocalString,valueOf方法有什么区别
1. 2.简单来说,tostring就是用字符串来代替对象.tolocalstring就是根据不同的语言环境吧对象转成字符串,实际上totolocalstring是有缺省参数的,如tolocalstr ...
- 一个靠谱的国外maven镜像地址
<mirror> <id>ui</id> <mirrorOf>central</mirrorOf> <name>Human Re ...
- icon-font与svg
icon font 使用与svg应用分享 icon font 字体概述 css3增加了@font-face属性,传统的浏览器是通过font-family来设置字体,如果系统里没有的话就用其它字体来代替 ...
- C#中Cookie的概述及应用
1.Cookie简介 Cookie 提供了一种在 Web 应用程序中存储用户特定信息的方法.例如,当用户访问您的站点时,您可以使用 Cookie 存储用户首选项或其他信息.当该用户再次访问您的网站时, ...
- CAS实现SSO单点登录原理
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- Spring的入门的程序
1 下载Spring的开发包: spring-framework-3.2.0.RELEASE-dist.zip ---Spring开发包 docs :spring框架api和规范 libs :spri ...
- Python Day 01
What is variables? 一段命名的内存空间 变量即在程序运行过程中,它的值是允许改变的量 1.变量命名: 合法: 显式.通俗易懂. nums_of_jay_gf = 19 NumsOfJ ...
- C#如何获取项目中的其他文件夹的路径
//一般用string p=AppDomain.CurrentDomain.BaseDirectory+"\\其他"; //其它的还有 string str1 =Process.G ...
- The connection to adb is down, and a severe error has occured.问题解决方法小结
遇到了几次这个问题:The connection to adb is down, and a severe error has occured. You must restart adb and Ec ...
- Linux 命令 find
find命令的基本格式是:find [路径] [选项] [操作]路径是find命令所查找的范围,如用.来表示当前目录,用/来表示根目录,选项用于指定查找条件,如:可以指定按照文件的属主,更改时间文件类 ...