进一步封装poco下的mysql操作
为方便程序对mysql操作,我对poco的mysql进行了再次封装,主要是针对自己应用需要的部分。
开发工具:netbean
系统环境:centos7
poco版本: poco-1.9.0-all
主要参考poco提供的例子,可能还有部分网上内容。不过,本次封装内容也不多,大伙别笑话。
头文件
#ifndef POCOMYSQL_H
#define POCOMYSQL_H
#include <Poco/Exception.h>
#include <Poco/Format.h>
#include <Poco/Data/Session.h>
#include <Poco/Data/RecordSet.h>
#include <Poco/Data/Row.h>
#include <Poco/Tuple.h>
#include <Poco/Data/Statement.h>
#include <Poco/Data/MySQL/Utility.h>
#include <Poco/Data/MySQL/MySQL.h>
#include <Poco/Data/StatementImpl.h>
#include <Poco/Data/SessionPool.h>
#include <Poco/Data/MySQL/Connector.h>
#include <Poco/Data/MySQL/MySQLException.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
//#include <vector>
#include <list>
using std::string;
using std::wstring;
using namespace Poco::Data::Keywords;
using Poco::Data::Session;
using Poco::Data::Statement;
using Poco::Data::RecordSet;
using Poco::format;
using Poco::DateTime;
using Poco::NumberParser;
using Poco::Any;
using Poco::AnyCast;
using Poco::Int32;
using Poco::Nullable;
using Poco::Tuple;
using Poco::DynamicAny;
class PocoMySQL {
public:
PocoMySQL();
PocoMySQL(string host,int port,string user,string password,string db);
PocoMySQL(string connectString);
bool connect();
PocoMySQL(const PocoMySQL& orig);
virtual ~PocoMySQL();
int execute(string sql);
template<typename T>
bool query(string sql,T &results){
try
{
*_pSession << sql, into(results), now;
return true;
}
catch(Poco::Exception& e){
return false;
}
}
private:
//Poco::SharedPtr<Poco::Data::Session> _pSession = 0;
Session* _pSession;
string _host;
int _port;
string _user;
string _password;
string _db;
string _connectionstring;
bool _connected;
};
#endif /* POCOMYSQL_H */
cpp文件:
#include "PocoMySQL.h"
PocoMySQL::PocoMySQL() {
Poco::Data::MySQL::Connector::registerConnector();
}
PocoMySQL::PocoMySQL(string host,int port,string user,string password,string db){
this->_host = host;
this->_port = port;
this->_user = user;
this->_password = password;
this->_db = db;
//const char fmt[]="host=%s;port=%d;db=%s;user=%s;password=%s;compress=true;auto-reconnect=true";
char* buff = new char[512];
sprintf(buff,"host=%s;port=%d;db=%s;user=%s;password=%s;compress=true;auto-reconnect=true",this->_host.c_str(),this->_port,this->_db.c_str(),this->_user.c_str(),this->_password.c_str());
this->_connectionstring = buff;
delete buff;
Poco::Data::MySQL::Connector::registerConnector();
}
PocoMySQL::PocoMySQL(string connectString){
this->_connectionstring = connectString;
Poco::Data::MySQL::Connector::registerConnector();
}
bool PocoMySQL::connect(){
//Poco::Data::MySQL::Connector.registerConnector();
try
{
//Session session(this->_connectionstring);
_pSession = new Session(Poco::Data::MySQL::Connector::KEY, this->_connectionstring);
std::cout << "connect to dabase " << this->_db << " success..." << std::endl;
//this->_pSession = new Session(Poco::Data::MySQL::Connector.createSession(this->_connectionstring));
//return this->_pSession->isConnected();
}
catch(Poco::Exception& e){
std::cout << "connect to dabase " << this->_db << " fail..." << std::endl;
return false;
}
return true;
}
//执行增,删,修改操作,返回影响记录的行数
int PocoMySQL::execute(string sql){
try
{
Statement stt(*this->_pSession);
stt << sql;
size_t r = stt.execute();
std::cout << "affected " << r << " rows" << std::endl;
return r;
}
catch(Poco::Exception& e){
std::cout << "execute " << e.displayText() << std::endl;
return -1;
}
//this->_pSession << sql ,into(count),now;
}
PocoMySQL::PocoMySQL(const PocoMySQL& orig) {
}
PocoMySQL::~PocoMySQL() {
Poco::Data::MySQL::Connector::unregisterConnector();
}
调用:
typedef Poco::Tuple<Int32, Nullable<std::string>, Nullable<Int32> > STUDENT;
int main_mysql(int argc,char * argv[]){
PocoMySQL my("127.0.0.1",3306,"root","root","test");
bool connect = my.connect();
if(connect){
std::cout << "connected success" << endl;
string sql;
srand((int)time(0));
for(int i=0;i<10;i++){
int age= rand() % 60 + 1;
char buff[200];
sprintf(buff,"insert into student(name,age) values('name-%d',%d)",i,age);
sql = buff;
my.execute(sql);
}
sql = "SELECT id,name,age FROM student";
std::vector<STUDENT> result;
//模板类方法的的申明与实现必须都在h文件中完成,否则链接时会报错。
bool ret = my.query(sql,result);
for(int i=0;i<result.size();i++){
std::cout << result[i].get<0>() << "\t"<< result[i].get<1>() << "\t"<< result[i].get<2>() << std::endl;
}
//my.query3(sql);
}else{
std::cout << "fail" << endl;
}
return 0;
}
进一步封装poco下的mysql操作的更多相关文章
- PHP封装的一个单例模式Mysql操作类
掌握满足单例模式的必要条件----三私一公. ①私有的构造方法-为了防止在类外使用new关键字实例化对象. ②私有的成员属性-为了防止在类外引入这个存放对象的属性. ③私有的克隆方法-为了防止在类外通 ...
- centos 6x系统下源码安装mysql操作记录
在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配.可以通过源 ...
- CentOS7下安装Mysql和Memcached 以及 使用C#操作Mysql和Memcached
我本身是学.net的,但是现在很多主流SQL和NOSQL都是部置在linux下,本着好学的精神,前段时间装了个虚拟机,在其装上CentOS64位的服务器系统,对于英文0基础,linux0基础的我来说, ...
- 在Jena框架下基于MySQL数据库实现本体的存取操作
在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...
- Linux下的MySQL简单操作(服务启动与关闭、启动与关闭、查看版本)
小弟今天记录一下在Linux系统下面的MySQL的简单使用,如下: 服务启动与关闭 启动与关闭 查看版本 环境 Linux版本:centeros 6.6(下面演示),Ubuntu 12.04(参见文章 ...
- linux下mysql操作的命令
最近在学习mysql,还是只菜鸟,找到下面篇文章对初学者挺有用的,所以共享下 1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql star ...
- mysql在cmd命令下执行数据库操作
windows+r 运行cmd命令,执行以下操作! 当mysql 数据库文件相对于来说比较大的时候,这个时候你可能在正常环境下的mysql中是导入不进去的,因为mysql数据库本身就有默认的导入文件大 ...
- linux下的shell操作mysql
(1)MySQL的启动 重启了一次服务器后,使用> mysql -u root -p登陆是出现下面的错误: ERROR 2002 (HY000): Can't connect to local ...
- mac下的一些mysql操作
#一.从终端进入mysql 不同于windows下的mysql.mac下的mysql安装路径不同,所以操作上会略有不同: 以下操作以默认安装mysql为前提. ##一(1):打开终端后,先设置路径,后 ...
随机推荐
- 多线程的基本概念和Delphi线程对象Tthread介绍
多线程的基本概念和Delphi线程对象Tthread介绍 作者:xiaoru WIN 98/NT/2000/XP是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU运行 ...
- UVA 511 Do You Know the Way to San Jose?
题目链接:https://vjudge.net/problem/UVA-511 题目翻译摘自<算法禁赛入门经典> 题目大意 有 n 张地图(已知名称和某两个对角线端点的坐标)和 m 个地名 ...
- 初识OpenCV-Python - 010: 精致边缘探测
本节主要介绍使用Canny函数达到边缘探测的结果. Code: import cv2from matplotlib import pyplot as plt img = cv2.imread('bal ...
- view架构
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- 面试系列16 redis的持久化
1.RDB和AOF两种持久化机制的介绍 RDB持久化机制,对redis中的数据执行周期性的持久化 AOF机制对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启的 ...
- wangEditor 菜单栏随页面滚动位置改变(吸顶)问题解决
参考:https://www.kancloud.cn/wangfupeng/wangeditor2/113980 当页面向下滚动到隐藏了菜单栏时,编辑器默认会fixed菜单栏,即让菜单栏保持『吸顶』状 ...
- js 禁止/允许页面滚动
参考:https://blog.csdn.net/huangfu_chunfeng/article/details/46429997 https://www.cnblogs.com/w ...
- Codeforces Round #478 Div2 975A 975B 975C 975D
A. Aramic script 题目大意: 对于每个单词,定义一种集合,这个集合包含且仅包含单词中出现的字母.给你一堆单词,问有多少种这种集合. 题解: 状压,插入set,取size #in ...
- html--垂直居中
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 【JZOJ3236】矮人排队
description 在七山七海之外的一个小村庄,白雪公主与N个矮人住在一起,所有时间都花在吃和玩League of Legend游戏.白雪公主决心终结这样的生活,所以为他们举办了体育课. 在每节课 ...