【五】ODB - C++ 表單列函式count、min、max(V1.0)

CalmReason發表於2015-12-05

原文地址http://www.codesynthesis.com/products/odb/doc/manual.xhtml#2.7

表單列函式主要作用:是用C++類的成員物件來盛放表單的列函式結果。

使用方式:

1 在模板標頭檔案中定義盛放結果的結構體,這個結構體的定義完全隸屬於person類,所以放到person類的標頭檔案中定義最好。

#pragma db view object(person)
struct person_stat
{
  #pragma db column("count(" + person::id_ + ")")
  std::size_t count;

  #pragma db column("min(" + person::age_ + ")")
  unsigned short min_age;

  #pragma db column("max(" + person::age_ + ")")
  unsigned short max_age;
};

2 用odb命令列重新編譯person.hxx標頭檔案,生成新的-odb.hxx和-odb.cxx檔案,放到專案中使用。

3 呼叫原始碼:

#include <memory>   // std::auto_ptr
#include <iostream>

#include <odb/database.hxx>
#include <odb/transaction.hxx>

#include <odb/mysql/database.hxx>

#include "person.hxx"
#include "person-odb.hxx"

using namespace std;
using namespace odb::core;

int
	main (int argc, char* argv[])
{
	try
	{
		auto_ptr<odb::database> db (
			new odb::mysql::database (
			"root"     // database login name
			,"123456" // database password
			,"collect" // database name
			,"localhost"
			,13306
			));
		{
			transaction t (db->begin ());

			person_stat ps (db->query_value<person_stat> ());

			cout << "count  : " << ps.count << endl
				<< "min age: " << ps.min_age << endl
				<< "max age: " << ps.max_age << endl;

			t.commit ();
		}
	}
	catch (const odb::exception& e)
	{
		cerr << e.what () << endl;
		return 1;
	}
	cin.get();
}



相關文章