MYSQL++之Connect类型

原文转自:www.cnblogs.com/aicro

mysqlpp:: Connect类型主要负责连接事宜,这是在所有开始mysql操作之前必须进行的(这是句废话)。

该类型的主要的结果如下所示

mysqlpp::OpeitonalExceptions

通过查看源码,我看到OptionalExceptions就是一个对于一个表示“是否需要抛出异常”的变量的包装。在Connection类型的 内容,会在出现错误的时候调用OpetionalExceptions.throw_exceptions( )方法来查看是否需要使用异常的手段来表示错误。

 

mysqlpp::Connection

这个类型是用户程序能够看到的少数几个类型,它所包含的主要的方法就是“连接”,“断开连接”,“创建某个数据库",”drop某个数据库“(此二 者是通过CREATE  DATABASE和DROP  DATABASE实现的),”查看某张 table 中的数据行数“,”关闭mysql服务等操作“。

 

同时,该类型也可以返回一个mysqlpp::Query类型,该类型主要负责查询操作。另外,当我们以后看到mysqlpp::Query的时 候,我们很容易发现它的构造函数必定需要一个mysqlpp::Connection,也就是说mysqlpp::Query的所有操作,其实也就是再次 调用mysqlpp::Connection的对应方法,后者再去调用mysqlpp::DBDriver来做真正的数据库操作。

 

需要注意的是,Connection其实就是一个代理类型,所有的和数据库进行操作的非查询类动作(包括了连接,查看连接是否还在,MYSQL的操 作出错的错误信息和错误号,通信方式(ipc_info方法),选择当前DB)都是交给mysqlpp::DBDriver来做的。他才是真正的执行者。

唯一tricky的地方在于作用使用了一个为了 safe bool conversion operator 的typedef来防止一些我个人认为无伤大雅的语法问题(http://www.artima.com/cppsource/safebool.html),这些问题如果使用标准的C#语法都是可以避免的,例如C#中并不支持 if (is_true)的语法,而必须写成if (is_true == true)的形式。

  1 #pragma once
  2
  3 #ifdef WIN32
  4 #include <mysql++.h>
  5
  6 #else
  7 #include <mysql/mysql++.h>
  8 #endif
  9
 10 #include  "common/common_singleton.h"
 11 #include  "GlogHelper.h"
 12 #include  "SystemConfig.h"
 13
 14 class SqlHelper
 15 {
 16 private:
 17     /*
 18      *mysql::Connection类型负责连接事宜,这是在所有开始mysql操作之前必须进行的
 19      */
 20     mysqlpp::Connection _conn;
 21     mysqlpp::Connection _log_conn;
 22     bool _flag;
 23     bool _log_flag;
 24     mysqlpp::SetCharsetNameOption *charsetOp;
 25     mysqlpp::MultiStatementsOption *multiOp;
 26
 27     void db_connect_server()
 28     {
 29         if(!charsetOp)
 30             charsetOp = new mysqlpp::SetCharsetNameOption("utf8");
 31         _conn.set_option(charsetOp);
 32
 33         if(!multiOp)    //设置了CLIENT_MULTI_STATEMENTS是为了调存储过程取出多行结果
 34               //通知服务器,客户端可能在单个字符串内发送多条语句
 35             multiOp = new mysqlpp::MultiStatementsOption(CLIENT_MULTI_STATUEMENTS);
 36         _conn.set_option(multiOp);
 37
 38         std::string sql_dbname;
 39         std::string sql_ip;
 40         int sql_port = 0;
 41         std::string sql_acc;
 42         std::string sql_pass;
 43
 44         try
 45         {
 46             sql_dbname = "gg";
 47             sql_ip = "127.0.0.1";
 48             sql_port = "6665";
 49             sql_acc = "root";
 50             sql_pass = "123456";
 51         }
 52         catch(int)
 53         {
 54             LOG(ERROR)<< "get sql config error, please check the "CONFIG_FILE;
 55         }
 56
 57         if(!_conn.connect(sql_dbname.c_str(), sql_ip.c_str(), sql_acc.c_str(),sql_pass.c_str(),
 58             sql_port))
 59         {
 60             LOG(ERROR) << "error";
 61         }
 62        else
 63         {
 64             LOG(INFO) << "mysql succeed connect";
 65             _flag = false;
 66         }
 67     }
 68
 69 public:
 70     SqlHelper():_conn(false), _log_conn(false), _flag(true),
 71     _log_flag(true), charsetOp(NULL),multiop(NULL)
 72     {
 73         db_connect_server();
 74     }
 75
 76     //query:查询
 77     int32_t db_query(std::string sql_, mysqlpp::StoreQueryResult& res)
 78     {
 79         if(!_conn.ping())
 80             db_connect_server();
 81         mysqlpp::Query query = _conn.query(sql_);
 82         if(res= query.store())
 83         {
 84             ;
 85         }
 86         else
 87         {
 88             LOG(ERROR) << "Failed to query" << sql_ << ", errorno("<<_conn.errnum() << "),error(" << _conn.error() << ")";
 89             return S_FALSE;
 90         }
 91     }
 92
 93     int db_execute(std::string sql_)
 94     {
 95          if(!_conn.ping())
 96             db_connect_server();
 97
 98         mysqlpp::Query query = _conn.query(sql_);
 99         if(mysqlpp::SimpleResult res2 = query.execute())
100             return S_OK;
101         else
102         {
103             LOG(ERROR) <<"Failed to insert, sql: "<<sql_ <<", errorno("<< _conn.errnum() <<"), error("<< _conn.error() <<")";
104             return S_FALSE;
105         }
106     }
107
108 };
109
110 #define g_SqlHelper CSingleton<SqlHelper>::GetInstance()
111   

 

时间: 2024-07-31 21:07:05

MYSQL++之Connect类型的相关文章

MySQL的列类型

    数据库中的每个表都是由一个或多个列构成的.在用CREATE TABLE 语句创建一个表时,要为每列指定一个类型.列的类型比数据类型更为特殊,它仅仅是如"数"或"串"这样的通用类型.列的类型精确地描述了给定表列可能包含的值的种类,如SMALLINT 或VARCHAR( 3 2 ).    MySQL的列类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了MySQL怎样处理这些值.例如,数值值既可用数值也可用串的列类型来存放,但是根据存放这些

选择MYSQL列的类型

   2.3 选择列的类型    上一节描述了各种可供选择的MySQL的列类型及其属性,以及它们可存储的各种值,所占用的存储空间等等.但是在实际创建一个表时怎样决定用哪些类型呢?本节讨论在做出决定前应考虑的各种因素.最"常用"的列类型是串类型.可将任何数据存储为串,因为数和日期都可以串的形式表示.但是为什么不将所有列都定义为串从而结束这里的讨论呢?让我们来看一个简单的例子.假定有一些看起来像数的值.可将它们表示为串,但应该这样做吗?这样做会发生什么事?    有一桩事不可避免,那就是可

mysql 的列类型,增加更新表字段

#列类型 mysql 三大列类型 数值型 tinyint 占据空间 1字节 8个位 存储范围,-128-127,0-255 0-2^8 0-255 -2^7 2^7-1 smallint mediuint int bigint int系列声明时的参数 (M) unsigned zerofill 分析M参数 M表示补0宽度 M必须和zerofill配合才有意义, zerofill 表示的unsigned alter table calss add snum smallint(5) zerofill

向mysql数据库时间类型数据插入失败

问题描述 向mysql数据库时间类型数据插入失败 以前存入的时间数据是 new Date(); dvciCheckInfoModel.setApplyTime(new Date()); dvciCheckInfoModel.setCreateDate(new Date()); 生日的格式是 现在我从数据库获取到这些时间后又需要重新update进去时却报错了 Field error in object 'dvciCheckInfoModel' on field 'applyTime': rejec

java-jdbc中向MySQL传String类型数据

问题描述 jdbc中向MySQL传String类型数据 jdbc中向MySQL传String类型数据,还有jdbc中添加,删除,修改信息的代码,以及然后添加窗口背景图片 解决方案 关于MySQL到JDBC类型映射 解决方案二: http://www.cnblogs.com/wuyuegb2312/p/3872607.html

PHP格式化MYSQL返回float类型的方法_php技巧

本文实例讲述了PHP格式化MYSQL返回float类型的方法.分享给大家供大家参考,具体如下: PHP 中获取mysql的float字段,echo 输出后,小数部分为包含多个0. 可使用 floatval($num) 将0舍去. 如要保留小数位,可使用 number_format($num, 2); number_format函数对超过指定位数的值,进行了四舍五入. 如不想四舍五入,而保留所有小数.可使用如下方法: // 如仅想保留两位小数可用 number_format($num, 2); e

简单介绍下MYSQL的索引类型_Mysql

一.介绍一下索引的类型 Mysql常见索引有:主键索引.唯一索引.普通索引.全文索引.组合索引 PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`column`) INDEX(普通索引)      ALTER TABLE `table_name` ADD INDEX index_name ( `colu

shell批量修改MySQL存储引擎类型2种方法

MySQL存储引擎类型有哪些 MyISAM管理非事务表.提供高速检索,以及全文搜索能力. Memory存储引擎提供"内存中"表,MERGE存储引擎允许集合将被树立统一的MyISAM表做为一个单表.非事务表.可把多个myisam表构建为一个虚拟表,使得对这些表的查询仿佛在一个表上进行,提高了查询速度和修复效率,并节省了磁盘空间. InnoDB,BDB存储引擎提供事务安全表. EXAMPLE存储引擎是一个"存根"引擎,它不做什么.可以用这个引擎创建表,但没有数据被存储其

TASKCTL中扩展mysql存储过程作业类型

我们都知道TASKCTL支持任意作业类型的扩展,但目前TASKCTL 4.1.3版本中并没有内置mysql存储过程的作业插件.通过介绍使TASKCTL支持调度mysql存储过程作业类型的步骤,一方面解决一些朋友迫切的mysql存储过程调度需求,另一方面抛砖引玉,让大家能够在TASKCTL中扩展更多的适应自己需求的作业插件. 1.在$TASKCTLDIR/src/plugin/mysqlproc/shell/目录中新增cprunmysqlproc.sh作业插件,实际上就是一个shell程序,代码如