问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何编译POCO

发布网友 发布时间:2022-04-23 11:07

我来回答

3个回答

懂视网 时间:2022-04-10 19:00

为方便程序对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>() << " "<< result[i].get<1>() << " "<< result[i].get<2>() << std::endl;
        }

        //my.query3(sql);
    }else{
        std::cout << "fail" << endl;
    }
    return 0;
}

进一步封装poco下的mysql操作

标签:cte   connector   size_t   res   std   const   cat   内容   pen   

热心网友 时间:2022-04-10 16:08

Poco C++库是:
一系列C++类库,类似Java类库,.Net框架,Apple的Cocoa;
侧重于互联网时代的网络应用程序
使用高效的,现代的标准ANSI/ISO C++,并基于STL
高可移值性,并可在多个平台下可用
开源,并使用Boost Software License发布
不管是否商用,都完全免费
Poco库概览

特性:
DynamicAny与Any类
Cache框架
基于OpenSSL的密码系统
日期,时间类库
事件和通知框架
FTP客户端
跨平台的文件系统类库
HTML表单类库
HTTP客户端和服务端(支持SSL),C++ 服务器页面编译器
日志框架
多线程框架(线程池,活动对象,工作队列等)
POP3客户端类库
跨平台,一次编写,多平台编译和运行
进程管理和进程间通信类库
反射框架
基于PCRE的正则表达式
SMTP客户端类库
数据库访问类库(SQLite,MySQL, ODBC)
支持SSL/TLS,基于OpenSSL
动态类库加载
先进的内存和指针管理(Buffer, Pool)
Socket类库
网络数据流类库,支持Base64,HexBinary编解码,压缩等等
字符串格式化和其它字符串工具类库
TCP服务器框架(多线程)
文本编码和转换
Tuples
URI支持
支持UTF8和Unicode编码
UUID生成器
XML生成和解析器
Zip文件操作类库
Poco的使命
Poco是一个强大的类库,并易于构建自己的应用程序
Poco帮助你创建跨平台的应用程序(一次编写,多平台编译和运行)
模块化和可扩展,可应用于嵌入式到企业级程序
提供全面,易懂的编程接口
使用C++语言,快速且高效
Poco崇尚简易
在设计,代码风格和文档上保持一致
Poco强调代码质量,包括可读性,综合性,一致性,编码风格和可测试性
Poco使得C++编程更加容易
指导方针
高度关注代码质量,编码风格,一致性,可读性
高度关注测试
注重实用性
基于现有的,可靠的组件开发
版本历史
Summer 2004: Günter Obiltschnig started development
February 2005: First release on SourceForge
(Release 0.91 under Sleepycat license)
May 2005: First contributions by Aleksandar Fabijanic
January 2006: Release 1.0
March 2006: Release 1.1
July 2006: Moved to Boost license, POCO Community Website
August 2006: Release 1.2
May 2007: Release 1.3
July 2010: Stable Release 1.3.7,
about 20 contributors, used in 100s of projects
支持平台
Microsoft Windows
Linux
Mac OS X
HP-UX, Solaris, AIX*
Embedded Linux (uClibc, glibc)
iOS
Windows Embedded CE
QNX
Poco应用场景
创建自动化的中间件和设备
工业自动化和工业设备
流量控制系统
健康系统
测量,数据收集和测试系统
消费电子产品和家庭自动化产品
测量
航空交通管理系统
VoIP
票务和入口控制系统
包装应用程序
Poco的优势
全面的,完整的C++框架,可减少开发工作,快速让产品走向市场
易学易使用,以及相当多的示例代码和良好的文档
原生的C++代码,性能优秀,低内存占用
平台无关,一处编写,跨平台编译和运行
大多数情况下,可以开发机上完成开发和调试工作
可以非常容易的迁移到新平台

编译
下面简单介绍一下方法,以 vs2010 为例。
第一种方法:
(1) Poco 根目录下有build_vs100.cmd和buildwin.cmd这两个批处理文件, 我们得修改一下它们。
把build_vs100.cmd 修改为以下内容:
@echo off
if defined VS100COMNTOOLS (
call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vsvars64.bat")
buildwin 100 build all both x64 samples
红色的部分是vsvars64.bat的路径,具体要看本机的安装位置。这里因为是要编译X64,所以要修改环境。
蓝色部分是执行编译时候的参数(注意X64的X要小写)。参数的具体说明为:
buildwin VS_VERSION [ACTION] [LINKMODE] [CONFIGURATION] [PLATFORM] [SAMPLES] [TESTS] [TOOL]
VS_VERSION: 71|80|90|100|110
ACTION: build|rebuild|clean
LINKMODE: static_mt|static_md|shared|all
CONFIGURATION: release|debug|both
PLATFORM: Win32|x64|WinCE
SAMPLES: samples|nosamples
TESTS: tests|notests
TOOL: devenv|vcexpress|msbuild
具体的参数选择根据需求。
如果不需要 NetSSL_OpenSSL 和 MySQL ,此时保存后就双击它就行了。 它会自动编译好各种库。
如果要NetSSL_OpenSSL 这个库则打开buildwin.cmd文件:
设置 openssl 的路径,如:
set OPENSSL_DIR=c:\OpenSSL-Win64
set OPENSSL_INCLUDE=%OPENSSL_DIR%\include
set OPENSSL_LIB=%OPENSSL_DIR%\lib;%OPENSSL_DIR%\lib\VC
set INCLUDE=%INCLUDE%;%OPENSSL_INCLUDE%
set LIB=%LIB%;%OPENSSL_LIB%

注意,如果要 Poco 中的 MySQL 库 还得安装. Mysql
编辑好后,双击 build_vs100.cmd执行编译。完成后会在Poco根目录下的lib64中看到编译好的库。在bin64中有编译好的dll。
第二种方法(适合熟悉命令行的用户):
按需求修改完buildwin.cmd文件后,使用vs2010的Tools中“Visual Studio x64 Win64 命令提示(2010)”命令,进入命令行状态。转到Poco所在的根目录,直接输入命令:
buildwin 100 build all both x64 samples

最后需要注意的地方:
上述方法完成编译后,关于Data的MySQL、ODBC、SQLite三个库没有生成(原因不详),需要单独编译,在此以MySQL为例记录一下编译过程。在\Data\MySQL文件夹下,找到MySQL_vs100.sln文件,打开。
打开的工程是win32的,需要改为X64。在C++包含目录中添加本项目的include文件夹,例如:“C:\poco-1.5.1-all\Data\MySQL\include;”,还要添加安装的MySQL的include文件夹,例如“C:\Program Files\MySQL\MySQL Server 5.6\include”,在库目录中添加所需库的路径,例如“C:\Program Files\MySQL\MySQL Server 5.6\lib”。

热心网友 时间:2022-04-10 17:26

按需求修改完buildwin.cmd文件后,使用vs2010的Tools中“Visual Studio x64 Win64 命令提示(2010)”命令,进入命令行状态。转到Poco所在的根目录,直接输入命令:
buildwin 100 build all both x64 samples
最后需要注意的地方:
上述方法完成编译后,关于Data的MySQL、ODBC、SQLite三个库没有生成(原因不详),需要单独编译,在此以MySQL为例记录一下编译过程。在\Data\MySQL文件夹下,找到MySQL_vs100.sln文件,打开。
打开的工程是win32的,需要改为X64。在C++包含目录中添加本项目的include文件夹,例如:“C:\poco-1.5.1-all\Data\MySQL\include;”,还要添加安装的MySQL的include文件夹,例如“C:\Program Files\MySQL\MySQL Server 5.6\include”,在库目录中添加所需库的路径,例如“C:\Program Files\MySQL\MySQL Server 5.6\lib”。
注意:编译MySQL的Poco库,必须先安装MySQL。
设置好环境之后,就可以选择相应的配置(debug or release)进行编译。
编译完成后,生成的库在Poco根目录下的lib文件夹,如果是编译的动态库,则动态库在Poco根目录下的bin文件夹。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
何予卿简介 高振宇水稻专家、硕士生导师 Cell 突破!中科院遗传发育所田志喜领衔完成植物中首个图形结构基因组... ...Plant Cell期刊发表基因组组装助力填补禹氏三角的最后一块:四倍体埃 ... 文献解析Cell水稻泛基因组揭示隐藏的基因组变异 韩斌主要学术成果 雨中冒险2棱镜实验怎么完成 棱镜挑战通关攻略介绍 联通宽带DNS怎么填? 联通宽带dns应该设置哪个好点 联通宽带dns怎么设置好点 跨境电商是什么?好做么 什么是跨境电商的本质 跨境电商指得是什么? 跨境电商跟外贸是一回事吗?两者有什么不同 跨境电商是什么东西? 什么叫跨境电子商务? 怎么修改电脑上的时间设置? 安装了双系统的电脑怎样在启动时更改默认启动时间 如何设置电脑的开关机时间 如何修改电脑启动等待时间 怎么修改系统开机时间? 我也想修改我的电脑启动时间 荔枝吃多了会得荔枝病,那到底什么是荔枝病?荔枝病会有哪些症状? 笔记本电脑怎么设置自动开机时间 吃荔枝后皮肤瘙痒怎么办? win10怎么修改第一次开机时间? 吃多了荔枝怎么办? 吃荔枝之后开车会被查出酒驾吗? 怎么修改电脑开关机时间 荔枝是很多人都很喜欢的水果,但过量食用荔枝会带来哪些后果? java序列化 POCOs支持,指的是什么? 茄盒怎么做好吃? Linkedlist java问题11 求一作图软件 求一个电子书制作软件(可放大图片浏览) 茄盒的做法,糖醋茄盒怎么做好吃,糖醋茄盒的家常做法 java swing的Jtable、GirdLayout java序列化 判断题 茄盒怎么做才好吃啊 JAVA网络基础SeverSocket,Socket与accept连接时报错 茄盒怎么做好吃,茄盒的吃法 ArrayList的toArray的java代码,结果为何是? 茄盒怎么做更好吃入味 学习scala有哪些好的资源 摩托罗拉E398 摩托罗拉E770 那个比较好 炸茄盒怎么做好吃,快来学学吧 为什么我的浏览器不能打开博克 myroc.mypoco.cn 油炸茄子盒怎么做呢? 真的有纯植物染发,不伤害头发的染发剂吗?效果怎么样?
  • 焦点

最新推荐

猜你喜欢

热门推荐