用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/