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