【三】ODB - C++ 單表查詢(V1.02)

CalmReason發表於2015-11-03

查詢的機制:
(1)查詢是通過查詢模板型別odb::query和查詢結果模板型別odb::result來共同完成的
(2)查詢型別odb::query提供bool表示式來儲存查詢條件,
(3)查詢結果型別odb::result用來儲存結果,並提供迭代器給客戶訪問查詢結果
(4)db物件呼叫自己的query方法來執行查詢,並將查詢方法的引數設定為查詢型別odb::query的靜態成員組合而成的bool表示式

查詢person表中年齡大於30歲的人,並簡單的列印這些人的資訊:
原始碼:

// driver.cxx
//

#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<database> db (new odb::mysql::database (argc, argv));
        //連線資料庫
        auto_ptr<odb::database> db (
            new odb::mysql::database (
            "root"     // database login name
            ,"123456" // database password
            ,"collect" // database name
            ,"localhost"
            ,13306
            ));
        typedef odb::query<person> query;
        typedef odb::result<person> result;

        // Say hello to those over 30.
        //
        {
            transaction t (db->begin ());

            result r (db->query<person> (query::age > 30));

            for (result::iterator i (r.begin ()); i != r.end (); ++i)
            {
                cout << "Hello, " << i->first () << "!" << endl;
            }

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

person裡面的資料:
這裡寫圖片描述
執行結果:
這裡寫圖片描述
原文地址:
http://www.codesynthesis.com/products/odb/doc/manual.xhtml#2.5

相關文章