標準APIを使ったサンプル
#include <stdio.h>
#include <bzs/db/protocol/tdap/client/database.h>
#include <bzs/db/protocol/tdap/client/table.h>
#include <bzs/db/protocol/tdap/client/dbDef.h>
#include <vector>
using namespace bzs::db::protocol::tdap::client;
using namespace bzs::db::protocol::tdap;
static const short fieldnum_id = 0;
static const short fieldnum_name = 1;
static const short fieldnum_group = 2;
static const short fieldnum_tel = 3;
static const char_td keynum_group = 1;
class user
{
public:
int id;
std::_tstring name;
int group;
std::_tstring tel;
};
void dumpUser(const user* user)
{
_tprintf(_T(" id %d\n"), user->id);
_tprintf(_T(" name %s\n"), user->name.c_str());
_tprintf(_T(" group %d\n"), user->group);
_tprintf(_T(" tel %s\n\n"), user->tel.c_str());
}
class userMappper
{
std::vector<user*>& m_users;
public:
userMappper(std::vector<user*>& users) : m_users(users) {}
void operator()(
table* tb)
{
user* u = new user();
u->group = tb->
getFVint(fieldnum_group);
m_users.push_back(u);
}
};
void showError(const _TCHAR* caption, const _TCHAR* tableName, short statusCode)
{
_TCHAR tmp[1024] = { 0x00 };
_tprintf(_T("%s error No.%ld %s\n"), caption, statusCode, tmp);
}
bool readUsers(
table* tb, std::vector<user*>& users)
{
userMappper ormap(users);
tb->
setFV(fieldnum_group, 3);
while (1)
{
{
if (tb->
stat() == STATUS_EOF)
return true;
return false;
}
ormap(tb);
}
}
{
bool newConnection = false;
if (!db->
connect(uri, newConnection))
{
showError(_T(
"connect daatabase"), NULL, db->
stat());
return false;
}
db->
open(uri, TYPE_SCHEMA_BDF);
{
showError(_T(
"open daatabase"), NULL, db->
stat());
return false;
}
return true;
}
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
int result = 0;
static const _TCHAR* uri = _T("tdap://localhost/test?dbfile=test.bdf");
{
showError(_T(
"open user table"), NULL, db->
stat());
else
{
std::vector<user*> users;
if (readUsers(tbu, users))
{
_tprintf(_T("Read records success.\nRecord count = %d\n"),
users.size());
std::for_each(users.begin(), users.end(), dumpUser);
}
for (size_t i = 0; i < users.size(); ++i)
delete users[i];
}
}
return result;
}
コンビニエンスAPIを使ったサンプル
#include <bzs/db/protocol/tdap/client/trdboostapi.h>
#include <iostream>
#include <vector>
using namespace bzs::db::protocol::tdap::client;
using namespace bzs::db::protocol::tdap;
static const short fieldnum_id = 0;
static const short fieldnum_name = 1;
static const short fieldnum_group = 2;
static const short fieldnum_tel = 3;
static const char_td keynum_group = 1;
class user
{
public:
int id;
std::string name;
int group;
std::string tel;
};
typedef boost::shared_ptr<user> user_ptr;
void dumpUser(const user_ptr& user)
{
std::cout << " id " << user->id << std::endl;
std::cout << " name " << user->name << std::endl;
std::cout << " group " << user->group << std::endl;
std::cout << " tel " << user->tel << std::endl << std::endl;
}
class userMappper
{
std::vector<user_ptr>& m_users;
public:
userMappper(std::vector<user_ptr>& users) : m_users(users) {}
void operator()(const fields& fds)
{
user_ptr u(new user());
u->id = fds[fieldnum_id].i();
u->name = fds[fieldnum_name].a_str();
u->group = fds[fieldnum_group].i();
u->tel = fds[fieldnum_tel].a_str();
m_users.push_back(u);
}
};
void readUsers(
table_ptr tb, std::vector<user_ptr>& users)
{
userMappper ormap(users);
}
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
try
{
_T("test"));
bool newConnection = false;
std::vector<user_ptr> users;
readUsers(tb, users);
std::cout << "Read records success.\nRecord count = " << users.size()
<< std::endl;
std::for_each(users.begin(), users.end(), dumpUser);
return 0;
}
catch (bzs::rtl::exception& e)
{
std::tcout << _T("[ERROR] ") << *bzs::rtl::getMsg(e) << std::endl;
}
return 1;
}