資源簡介
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(“?< 或者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?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????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
評論
共有 條評論