资源简介

poco 访问数据库测试例子,编译环境:VS2013 数据库:MySQL poco版本:1.7.4完整版

资源截图

代码片段和文件信息

/*步骤:
a.  创建会话(session)
b. 从DB中读写数据
c. 使用statements
d. 使用容器(Collection) (数据,集合...)
e. 使用limit限定
f. 如何使用复杂的数据类型(如何将一个C++对象映射到数据库的表


创建会话:Session create(const std::string& connectorKey const std::string& connectionString);
参数1:SQLite;MySQL;或者ODBC,支持Oracle SQLite DB2 SQLServer和PostgreSQL。
参数2:就是数据库文件的路径或者连接字符串


增:
对定义:std::string aName(“Peter“);
ses << “INSERT INTO 表名 VALUES(“ << aName << “)“ now;
或者ses << “INSERT INTO 表名 VALUES(?)“ use(aName) now;

查:
一般查找
std::string aName;
ses << “SELECT NAME FROM FORENAME“ into(aName) now; // aName的默认值为空字符串
ses << “SELECT NAME FROM FORENAME“ into(aName “default“) now;

匹配查找  先into后use  且不能使用常量 如4
std::string aName;
std::string match(“Peter“)
ses << “SELECT NAME FROM FORENAME WHERE NAME=?“ into(aName) use(match) now;
poco_assert (aName == match);

多字节匹配查找
std::string firstName(“Peter“;
std::string lastName(“Junior“);
int age = 0;
ses << “INSERT INTO PERSON VALUES (? ? ?)“ use(firstName) use(lastName) use(age) now;
ses << “SELECT (firstname lastname age) FROM Person“ into(firstName) into(lastName) into(age) now;

into语句允许定义一个默认值
ses << “SELECT (firstname lastname age) FROM Person“ into(firstName) into(lastName) into(age -1) now;

改:
session << “update Person set Address = ? WHERE Name= ?“ use(addr)use(name)now;

使用Statements:用于保存SQl语句,括号必须
std::string aName(“Peter“);
Statement stmt = ( ses << “INSERT INTO FORENAME VALUES(?)“ use(aName) );//括号必须
或者
Statement stmt(ses);
stmt << “INSERT INTO FORENAME VALUES(?)“ use(aName);

eg:
std::string aName(“Peter“);
Statement stmt = ( ses << “INSERT INTO FORENAME VALUES(?)“ use(aName) );
.
.
stmt.execute();
poco_assert (stmt.done());


容器使用:
默认支持以下容器类:
a. vector(数组): 无特别要求
b. set: 类型需要支持<操作符,注意:重复的key/value将忽略
c.  multiset: 需支持<操作符
d. map: 需支持()操作符,并且按key返回对象,注意:重复的key/value将忽略
e. multimap: 需支持()操作符,并按key返加对象.
std::vector names;
ses << “SELECT NAME FROM FORENAME“ into(names) now;

Limit限定:
std::vector names;
ses << “SELECT NAME FROM FORENAME“ into(names) limit(50) now;
以上代码将只返回50行的数据。(当然也可能什么都不返回)并追加到 names这个容量中。如果想确保50行记录返回,需要设置limit的第二参数为true(默认为false):
std::vector names;
ses << “SELECT NAME FROM FORENAME“ into(names) limit(50 true) now;

Statement stmt = (ses << “SELECT NAME FROM FORENAME“ into(aName) lowerLimit(1) upperLimit(10));//限制范围
Statement stmt = (ses << “SELECT NAME FROM FORENAME“ into(aName) range(110));


类作为保存变量:
namespace Poco {
namespace Data {

template <>
class TypeHandler
{
.....
}

记录集(RecordSet)
a. 遍历数据表中所有的行与列
b. 获取各列的元信息,比如名称,类型,长度等.
Statement select(session);
select << “SELECT * FROM Person“;
select.execute();
RecordSet rs(select);

遍历:
bool more = rs.moveFirst();
while (more)
{
for (std::size_t col = 0; col < cols; ++c

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    4907008  2015-02-25 23:20  MySql\Debug\libmysql.dll

     文件     153088  2016-08-25 21:57  MySql\Debug\MySql.exe

     文件    1358168  2016-08-25 21:57  MySql\Debug\MySql.ilk

     文件    3869696  2016-08-25 21:57  MySql\Debug\MySql.pdb

     文件    3788800  2016-08-25 15:03  MySql\Debug\PocoDatad.dll

     文件     430080  2016-08-25 15:27  MySql\Debug\PocoDataMySQLd.dll

     文件    3445248  2016-08-25 15:17  MySql\Debug\PocoFoundationd.dll

     文件       8483  2016-08-25 21:58  MySql\MySql\main.cpp

     文件       4369  2016-08-25 15:15  MySql\MySql\MySql.vcxproj

     文件        945  2016-08-25 14:37  MySql\MySql\MySql.vcxproj.filters

     文件        165  2016-08-25 13:31  MySql\MySql\MySql.vcxproj.user

     文件   43515904  2016-08-25 22:18  MySql\MySql.sdf

     文件        961  2016-08-25 13:31  MySql\MySql.sln

    ..A..H.     26112  2016-08-25 22:18  MySql\MySql.v12.suo

     目录          0  2016-08-27 15:48  MySql\MySql\Debug

     目录          0  2016-08-25 21:35  MySql\Debug

     目录          0  2016-08-25 21:58  MySql\MySql

     目录          0  2016-08-25 22:18  MySql

----------- ---------  ---------- -----  ----

             61509027                    18


评论

共有 条评论