1.下載POCO
https://pocoproject.org/releases/
我們選擇windows下的zip包下載,注意有兩個版本
- poco-1.9.4-all.zip
- poco-1.9.4.zip
其中不帶all的是基礎版本,只包含基本的poco類庫,帶all的是全功能版本,包含sqlite,opensll等等。
2.編譯Poco C++
前提條件:
1)Poco C++源碼(官網下載:點擊我下載);
2)已經安裝VS2015;
3)已經安裝cmake。
1) 進入poco-1.9.4文件夾,即源碼目錄,創建vsproject文件夾
2)打開windows的命令行,進入vsproject目錄,執行下面命令(注意:命令最後一句的 ”. .”):
mkdir cmake_build_x86
cd cmake_build_x86
cmake -G "Visual Studio 14 2015" ..
如果要生成64位工程,執行如下命令:
mkdir cmake_build_x64
cd cmake_build_x64
cmake -G “Visual Studio 14 2015 Win64” ..
執行上述命令之後,會在vsproject目錄生成 Poco.sln工程, 使用vs2015打開,編譯 POCO的動態鏈接庫
會在vsproject目錄bin, lib生成 動態庫.dll,及 鏈接庫.lib
3.測試操作SQLite
創建測試工程 ,拷貝相關頭文件,dll,及lib到工程目錄
測試代碼如下
// test_sqlite.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include "Poco/SharedPtr.h"
#include "Poco/DateTime.h"
#include "Poco/Data/SQLite/Connector.h"
#include "Poco/Data/Session.h"
#include "Poco/Data/RecordSet.h"
#pragma comment (lib , "PocoFoundationd.lib")
#pragma comment (lib , "PocoDatad.lib")
#pragma comment (lib , "PocoDataSQLited.lib")
using namespace Poco::Data::Keywords;
using Poco::DateTime;
using Poco::Data::Session;
using Poco::Data::Statement;
using Poco::Data::RecordSet;
using Poco::Data::SQLite::Connector;
int main(int argc, char* argv[])
{
Connector::registerConnector();
#if 1
// create a session
Session session("SQLite", "sample.db");
// drop sample table, if it exists
session << "DROP TABLE IF EXISTS Person", now;
// (re)create table
session << "CREATE TABLE Person (Name VARCHAR(30), Address VARCHAR, Age INTEGER(3), Birthday DATE)", now;
// insert some rows
DateTime bd(1980, 4, 1);
DateTime ld(1982, 5, 9);
session << "INSERT INTO Person VALUES('bob', 'beijing', 12, ?)", use(bd), now;
session << "INSERT INTO Person VALUES('sam', 'shanghai', 10, ?)", use(ld), now;
// a simple query
Statement select(session);
select << "SELECT * FROM Person";
#else
// create a session
Session session("SQLite", "test.db");
Statement select(session);
select << "SELECT * FROM user";
#endif // 0
try
{
select.execute();
}
catch (const std::exception& e)
{
const char * buf = e.what();
std::cout <<buf << std::endl;
}
// create a RecordSet
RecordSet rs(select);
std::size_t cols = rs.columnCount();
// print all column names
for (std::size_t col = 0; col < cols; ++col)
{
std::cout << rs.columnName(col) << "\t";// << std::endl;
}
std::cout << std::endl;
// iterate over all rows and columns
bool more = rs.moveFirst();
while (more)
{
for (std::size_t col = 0; col < cols; ++col)
{
std::cout << rs[col].convert<std::string>() << "\t";
}
std::cout << std::endl;
more = rs.moveNext();
}
return 0;
}
工程下載: 點我下載