📄 hyafx.h
字号:
/*
* Copyright (c) OCI高级编程
* @File name: hyafx.h
* @Author : He Xiong
* @Content : hy库接口的头文件
* @Date : 2003-10
****/
#ifndef HYAFX_H
#define HYAFX_H
#include <oci.h>
//引用库
#if defined(WIN32)
#pragma comment(lib, "oci.lib")
#endif
#include <vector>
using namespace std;
class HYException
{
public:
//构造函数
HYException(){}
//检查status状态下的错误
static bool checkErr(OCIError *pErr, sb4 status);
//获取错误码
static int errCode() { return err; }
static char* errMsg() { return (char*)msg; }
private:
static int err;
static char msg[512];
};
class HYConnection
{
protected:
//是否连接上
bool connected;
public:
//与连接相关的句柄
OCIEnv* envhp; //环境句柄
OCIError* errhp; //错误句柄
OCIServer* srvhp; //服务句柄
OCISvcCtx* svchp; //服务上下文句柄
OCISession* usrhp; //用户会话句柄
OCIDescribe* dschp; //描述句柄
OCITrans* txnhp; //事务句柄
public:
//构造函数
HYConnection();
//析构
~HYConnection() { disconnect(); }
//建立与Oracle的连接
bool connect(const char* dblink, const char* username, const char* password);
//断连
void disconnect();
//是否连接
bool isConnected() { return connected; }
};
class HYConnPool
{
public:
enum { MAX_CONN = 20 };
//获取实例
static HYConnPool* createPool();
//获取可用连接
HYConnection* getConn();
//析构
~HYConnPool();
private:
//禁用缺省构造及拷贝构造
HYConnPool();
HYConnPool(const HYConnPool&);
HYConnPool& operator=(const HYConnPool&);
//连接池实例指针
static HYConnPool* _pool;
//连接数组
vector<HYConnection*> conns;
};
//HYString
class HYString
{
public:
//构造
HYString(HYConnection* conn);
//析构
~HYString(){}
//获取串的长度(大小)
ub4 len();
//赋文本串值
void assign(unsigned char* str, ub4 len);
//赋值构造
HYString& operator=(const HYString& hystr);
//获取内存大小(以字节为单位)
ub4 memsize();
//获取串指针
char* c_str();
private:
HYString();
//连接
HYConnection* _conn;
//OCIString
OCIString* _str;
};
//HYCursor
class HYCursor
{
public:
//构造
HYCursor(HYConnection* connect);
//析构
~HYCursor() { close(); }
//打开
bool open();
//检查游标是否打开
bool isOpen() { return isOpen_; }
//关闭游标
void close();
//获取连接指针
HYConnection* getConn() { return conn; }
//准备SQL语句
void prepare(const char* stmt);
//绑定输入变量
void bindByPos(int pos, void* value, int size, void* indicator, int type);
void bindByName(char* name, void* value, int size, void* indicator, int type);
//定义输出变量
void defineByPos(int pos, void* value, int size, void* indicator, int type);
//执行SQL、获取结果集
bool execute(int times);
//获取列定义
bool getColumnDesc();
//获取结果
bool fetch(int rows=1);
//查询SQL
bool query(const char* query);
//获取列数
int numCols(void);
//返回记录行数
int numRows(void);
//获取列类型
ub2 colType (int colnumber);
//获取列名
char* colName (int colnumber);
//获取列值的长度
ub2 colSize (int colnumber);
//获取列值的小数位数
sb1 colScale (int colnumber);
//得到SQL操作类型(SELECT、UPDATE、INSERT)
int queryType(void);
//为游标分配空间
bool allocateCursor(void);
//获取字段值,以串的形式返回
char* getFieldValue(int i);
//释放结果集所占空间
void freeResult(void);
//写blob数据
bool writeBlob(const unsigned char* buffer, unsigned int bufsize);
//获取blob字段的大小
int sizeBlob();
//读取blob数据
bool readBlob(unsigned char* buffer, unsigned int bufsize);
protected:
HYConnection* conn; //连接
OCIStmt* stmthp; //语句句柄
OCIParam* colhd; //列句柄
bool isOpen_; //是否打开游标
string fieldValue; //字段值
vector<void *> buffers; //一行的记录值缓冲
vector <sb2> ind; //空指示符数组
vector<OCIDefine *> defines; //定义句柄数组
OCILobLocator* lobp; //lob定位符
vector<int> col_type; //列类型数组
vector<int> col_size; //列大小数组
vector<int> col_scale; //列的小数位数数组
};
#endif //HYAFX_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -