您好,欢迎访问一九零五行业门户网

c++框架库应用:数据库的连接池

poco c++中的数据库驱动部分,简洁,干净,工整,和数据库连接,封装成这样,还是比较好用的.下面是连接mysql连接的方法.
一 需求说明
    与mysql数据库建立连接池,并在连接池中获得一个连接,实现数据库常用增删改查
二 目标说明
    写出ansi风格的代码,并输出高度结果到终端,验证程序的有效性
三 调试条件:
    1.系统:ubuntu
    2.qt 或 其它ide
    3.安装了mysql,有正确的访问账户和密码
四 例程说明
    使用ide:qt creator
    项目文件:pocomysql.pro
qt += core network qt -= gui target = poco_mysql config += console config -= app_bundle defines += chartdir_hide_obsolete _crt_secure_no_warnings includepath += /usr/local/include/poco -i /usr/include/mysql libs += -l/usr/local/lib -lpocodata -lpocodatamysql -lpocodatasqlite -lpococrypto -lpocoutil -lpocofoundation -l /usr/lib64/mysql #libs += -l/usr/local/lib -lpocodata -lpocodatasqlite -lpocofoundation -lpococrypto -lpocoutil sources += \ mysql.cpp
main文件
#include poco/string.h #include poco/format.h #include poco/exception.h #include poco/data/statementimpl.h #include poco/data/mysql/connector.h #include poco/data/mysql/mysqlexception.h #include poco/data/session.h #include poco/data/sessionpool.h #include poco/data/sessionfactory.h #include poco/data/lob.h #include poco/data/mysql/mysqlstatementimpl.h #include poco/datetime.h #include poco/data/recordset.h #include poco/data/column.h #include using namespace poco::data::keywords; using namespace poco::data; using poco::data::session; using poco::data::mysql::connectionexception; using poco::data::mysql::statementexception; using poco::notfoundexception; using poco::data::statement; using poco::datetime; using poco::data::recordset; //给出访问数据库的信息 std::string _dbconnstring = host=localhost;port=3306; user=root;password=19810311; db=smart; compress=true;auto-reconnect=true; int main(int argc, char** argv) { mysql::connector::registerconnector(); //与数据库建立一个连接池 poco::data::sessionpool pool(mysql::connector::key, _dbconnstring,1,32,10); //从数据库存连接池中获得一个数据库连接 poco::data::session ses(pool.get()); //如果与数据库建立会话成功,输出连接信息 if(ses.isconnected()) std::cout << *** connected to << '(' << _dbconnstring << ')' << std::endl; //如果有为名ddjj的表,先删除,方便下面调试 ses << drop table if exists ddjj, now; //把查询结果存储到容器中 std::vector names; ses << show databases,into(names), now; //输出查询结果,此处列出所有数据库名称 for (std::vector::const_iterator it = names.begin(); it != names.end(); ++it) { std::cout << *it << std::endl; } // 建立一个表,名为ddjj,字段名:name,sex ses << create table ddjj(name varchar(20),sex varchar(20));, now; //实现数据纪录的插入 datetime bd(1980, 4, 1); datetime ld(1982, 5, 9); ses << insert into ddjj values('bart simpson', ?), use(bd), now; ses << insert into ddjj values('lisa simpson', ?), use(ld), now; //实现查询的方法,并输出查询结果 std::vector names1; ses << select * from ddjj where name like 'bart simpson' , into(names1), now; for (std::vector::const_iterator it = names1.begin(); it != names1.end(); ++it) { std::cout << *** tables: << *it << std::endl; } statement select(ses); select << select * from ddjj; select.execute(); //创建纪录集 recordset rs(select); std::size_t cols = rs.columncount(); //输出列名 for (std::size_t col = 0; col < cols; ++col) { std::cout << rs.columnname(col) << std::endl; } //输出所有查询到的结果 bool more = rs.movefirst(); while (more) { for (std::size_t col = 0; col < cols; ++col) { std::cout << rs[col].convert() << ; } std::cout << std::endl; more = rs.movenext(); } ses.close(); mysql::connector::unregisterconnector(); return 0; }
四 输出结果
*** connected to (host=localhost;port=3306;user=root;password=19810311;db=smart;compress=true;auto-reconnect=true)
information_schema
mysql
performance_schema
smart
*** tables: bart simpson
name
sex
bart simpson 1980-04-01 00:00:00 
lisa simpson 1982-05-09 00:00:00
其它类似信息

推荐信息