⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hyafx.h

📁 《Oracle Spatial与OCI高级编程》相关配套源码。介绍了Oracle数据库中的两项关键开发技术Oracle Spatial以及OCI(Oracle Call Interface)。
💻 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 + -