#ifndef __ORACLE_CONNECTOR_H__
#define __ORACLE_CONNECTOR_H__
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <assert.h>
#include <occi.h>
#include <occiCommon.h>
#include <occiData.h>
#include <occiObjects.h>
#include <occiAQ.h>
#include <occiControl.h>
#include "cxxlogable.h"
using namespace oracle::occi;
using namespace std;
class Oracle_Connector : public CxxLogable
{
public:
Oracle_Connector();
Oracle_Connector(const char* dbName,const char* dbUser,const char* dbPass);
~Oracle_Connector();
public:
bool connect(const char* dbName,const char* dbUser,const char* dbPass);
bool is_valid();
bool exec_update(const char* sql);
ResultSet* exec_query(const char* sql);
void clear_result_set(ResultSet* set);
void set_date(unsigned int paramIndex, time_t timeVal);
private:
bool bConnected;
Environment* m_env;
Connection* m_conn;
Statement* m_stmt;
};
Oracle_Connector::Oracle_Connector()
{
bConnected = false;
m_env = NULL;
m_conn = NULL;
m_stmt = NULL;
}
bool Oracle_Connector::connect(const char* dbName,const char* dbUser,const char* dbPass)
{
if(m_env ==0)
m_env = Environment::createEnvironment();
if(m_conn==0)
{
try
{
m_conn=m_env->createConnection(dbUser, dbPass, dbName);
bConnected = true;
}
catch (SQLException& ex)
{
m_conn = 0;
cout << "connect to database failed: " << ex.getMessage() << endl;
bConnected = false;
}
}
return bConnected;
}
Oracle_Connector::Oracle_Connector(const char* dbName, const char* dbUser, const char* dbPass)
{
bConnected = false;
m_env = NULL;
m_conn = NULL;
m_stmt = NULL;
this->connect(dbUser, dbPass, dbName);
}
Oracle_Connector::~Oracle_Connector()
{
if(m_stmt != NULL && m_conn != NULL)
m_conn->terminateStatement(m_stmt);
if(m_conn != NULL && m_env != NULL)
m_env->terminateConnection(m_conn);
}
bool Oracle_Connector::is_valid()
{
return bConnected;
}
// 执行数据库更新操作,包括insert、update、delete操作
bool Oracle_Connector::exec_update(const char* sql)
{
bool update_OK = true;
if(sql == NULL || m_conn == NULL || m_env == NULL)
{
return false;
}
try
{
m_stmt = m_conn->createStatement(sql);
}
catch (SQLException& ex)
{
m_stmt = NULL;
cout << "ExecuteUpdate failed: " << ex.getMessage() << endl;
return false;
}
update_OK = m_stmt->executeUpdate();
return update_OK;
}
//执行数据库查询操作,即select操作
ResultSet* Oracle_Connector::exec_query(const char* sql)
{
if(sql == NULL || m_conn == NULL || m_env == NULL)
{
return NULL;
}
try
{
m_stmt = m_conn->createStatement(sql);
}
catch (SQLException& ex)
{
m_stmt = NULL;
cout << "ExecuteQuery failed: " << ex.getMessage() << endl;
return NULL;
}
return m_stmt->executeQuery();
}
void Oracle_Connector::clear_result_set(ResultSet* set)
{
if(m_stmt == NULL || set == NULL)
{
return ;
}
else
m_stmt->closeResultSet(set);
}
void Oracle_Connector::set_date(unsigned int paramIndex, time_t timeVal)
{
// cout<<timeVal<<endl;
m_stmt = m_conn->createStatement();
assert(m_stmt != NULL);
tm* timeStruct = localtime(&timeVal);
Date date(m_env,
timeStruct->tm_year + 1900,
timeStruct->tm_mon + 1,
timeStruct->tm_mday,
timeStruct->tm_hour,
timeStruct->tm_min,
(timeStruct->tm_sec == 60) ? 0 : timeStruct->tm_sec);
m_stmt->setDate(paramIndex, date);
}
#endif // __ORACLE_CONNECTOR_H__