一个普通的类

用OCCI访问数据库,每次都要建立Environment,Connection等等很麻烦的准备工作,我把这些还有一些访问做了一个Db类,方便了对数据库的访问,同时列举了一个例子说明该类的使用方法.本代码在红旗linux,ORACLE9I,编译器版本为g++296下测试通过!

[@more@]

1 头文件db_lib.h

#ifndef DB_LIB_H
#define DB_LIB_H

#include

const int ERRCODE=-9999999;
class Db
{
private:
Db(Db &t) {};
Db &operator=(Db &t);
std::string userid,password,dbstr;
oracle::occi::Environment *env;
oracle::occi::Connection *conn;
std::vector<:occi::statement> vstate;
std::vector<:occi::resultset> vrs;
int state_count;
public:
Db(std::string u,std::string p,std::string l);
~Db();
int connect();
bool Sql(std::string s,int state_idx);
void setParam(int state_idx,int param_idx,int param);
void setParam(int state_idx,int param_idx,long int param);
void setParam(int state_idx,int param_idx,std::string s);
void setParam(int state_idx,int param_idx,char *s);
int executeQuery(int state_idx);
int executeUpdate(int state_idx);
void getValue(int rs_idx,int field_idx,std::string &s);
void getValue(int rs_idx,int field_idx,int& i);
void getValue(int rs_idx,int field_idx,long int& i);
void getValue(int rs_idx,int field_idx,char *s);
int commit();
int rollback();
void termSql(int stat_idx);
bool next(int rs_idx);
};
#endif

2 实现文件db_lib.cpp

#include
#include
#include
#include
#include

#include "db_lib.h"

using namespace oracle::occi;
using namespace std;

Db::Db(string u,string p,string l):userid(u),password(p),dbstr(l)
{
state_count = 0;
}

Db::~Db()
{
try
{
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
}
catch(SQLException &e)
{
cerr< }
catch(exception &ee)
{
cerr return false;
}
++state_count;
Statement *tmpstat = conn->createStatement(s);
vstate.push_back(tmpstat);
return true;
}
catch(exception &ee)
{
cerr< return false;
}
}

void Db::setParam(int state_idx,int param_idx,int param)
{
try
{
vstate[state_idx]->setInt(param_idx,param);
}
catch(exception &ee)
{
cerr< }
}

void Db::setParam(int state_idx,int param_idx,long int param)
{
try
{
vstate[state_idx]->setInt(param_idx,param);
}
catch(exception &ee)
{
cerr< }
}

void Db::setParam(int state_idx,int param_idx,string s)
{
try
{
vstate[state_idx]->setString(param_idx,s);
}
catch(exception &ee)
{
cerr< }
}

void Db::setParam(int state_idx,int param_idx,char *s)
{
try
{
vstate[state_idx]->setString(param_idx,s);
}
catch(exception &ee)
{
cerr< }
}

int Db::executeQuery(int state_idx)
{
try
{
ResultSet *tmprs = vstate[state_idx]->executeQuery();
vrs.push_back(tmprs);
return 0;
}
catch(SQLException &e)
{
cerr< return -e.getErrorCode();
}
catch(exception &ee)
{
cerr

using namespace std;

int main()
{
Db db("swami","swami","");
db.connect();

db.Sql("select * from t_fix_ledger where unit_id=:1",0); //0 表是sql语句顺序号 按0 1 2 3..下排
db.setParam(0,1,"210701001"); //0 表示第一条SQL语句,1表示SQL中第一个参数,"210701001"向第一个语句赋值
db.executeQuery(0); //0表示执行第一条语句
if(db.next(0)) //0表示第一条语句
{
string nm,accno;
long int bal;
db.getValue(0,2,accno); //0 第一条语句 2 表示返回结果的列顺序 按 1 2 3..下排
db.getValue(0,3,nm);
db.getValue(0,7,bal);
cout< db.setParam(1,1,"333333");
db.setParam(1,2,"000002");
cout< db.termSql(1);

db.commit();
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7296789/viewspace-982561/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7296789/viewspace-982561/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值