windows下vs2015編譯POCO及使用poco操作sqlite

1.下載POCO

https://pocoproject.org/releases/
我們選擇windows下的zip包下載,注意有兩個版本

  1. poco-1.9.4-all.zip
  2. 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;
}


工程下載: 點我下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章