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

📄 ora8api_linux.cpp

📁 通用的数据库中间库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ora8API_linux.cpp
//
//////////////////////////////////////////////////////////////////////

#include <SQLAPI.h>
#include <oraAPI.h>

#include <assert.h>

#include "samisc.h"
#include "errmsg.h"

#include <dlfcn.h>static const char *g_sORA8DLLName = "libclntsh.so";
static void *g_hORA8DLL = NULL;
long g_nORA8DLLVersionLoaded = 0;
static long g_nORA8DLLRefs = 0;

// API definitions
ora8API g_ora8API;

ora8API::ora8API()
{
	// 8.0.x calls
	OCIInitialize	= NULL;
	OCIHandleAlloc	= NULL;
	OCIHandleFree	= NULL;
	OCIDescriptorAlloc	= NULL;
	OCIDescriptorFree	= NULL;
	OCIEnvInit	= NULL;
	OCIServerAttach	= NULL;
	OCIServerDetach	= NULL;
	OCISessionBegin	= NULL;
	OCISessionEnd	= NULL;
	OCILogon	= NULL;
	OCILogoff	= NULL;
	OCIPasswordChange	= NULL;
	OCIStmtPrepare	= NULL;
	OCIBindByPos	= NULL;
	OCIBindByName	= NULL;
	OCIBindObject	= NULL;
	OCIBindDynamic	= NULL;
	OCIBindArrayOfStruct	= NULL;
	OCIStmtGetPieceInfo	= NULL;
	OCIStmtSetPieceInfo	= NULL;
	OCIStmtExecute	= NULL;
	OCIDefineByPos	= NULL;
	OCIDefineObject	= NULL;
	OCIDefineDynamic	= NULL;
	OCIDefineArrayOfStruct	= NULL;
	OCIStmtFetch	= NULL;
	OCIStmtGetBindInfo	= NULL;
	OCIDescribeAny	= NULL;
	OCIParamGet	= NULL;
	OCIParamSet	= NULL;
	OCITransStart	= NULL;
	OCITransDetach	= NULL;
	OCITransCommit	= NULL;
	OCITransRollback	= NULL;
	OCITransPrepare	= NULL;
	OCITransForget	= NULL;
	OCIErrorGet	= NULL;
	OCILobAppend	= NULL;
	OCILobAssign	= NULL;
	OCILobCharSetForm	= NULL;
	OCILobCharSetId	= NULL;
	OCILobCopy	= NULL;
	OCILobDisableBuffering	= NULL;
	OCILobEnableBuffering	= NULL;
	OCILobErase	= NULL;
	OCILobFileClose	= NULL;
	OCILobFileCloseAll	= NULL;
	OCILobFileExists	= NULL;
	OCILobFileGetName	= NULL;
	OCILobFileIsOpen	= NULL;
	OCILobFileOpen	= NULL;
	OCILobFileSetName	= NULL;
	OCILobFlushBuffer	= NULL;
	OCILobGetLength	= NULL;
	OCILobIsEqual	= NULL;
	OCILobLoadFromFile	= NULL;
	OCILobLocatorIsInit	= NULL;
	OCILobRead	= NULL;
	OCILobTrim	= NULL;
	OCILobWrite	= NULL;
	OCIBreak	= NULL;
	OCIReset	= NULL;
	OCIServerVersion	= NULL;
	OCIAttrGet	= NULL;
	OCIAttrSet	= NULL;
	OCISvcCtxToLda	= NULL;
	OCILdaToSvcCtx	= NULL;
	OCIResultSetToStmt	= NULL;

	// 8.1.x (8i) calls
	OCIEnvCreate	= NULL;
	OCIDurationBegin	= NULL;
	OCIDurationEnd	= NULL;
	OCILobCreateTemporary	= NULL;
	OCILobFreeTemporary	= NULL;
	OCILobIsTemporary	= NULL;
};

ora8ConnectionHandles::ora8ConnectionHandles()
{
	m_pOCIEnv		= NULL;
	m_pOCIError		= NULL;
	m_pOCISvcCtx	= NULL;
	m_pOCIServer	= NULL;
	m_pOCISession	= NULL;
}

ora8CommandHandles::ora8CommandHandles()
{
	m_pOCIStmt		= NULL;
	m_pOCIError		= NULL;
}

// detects if OCI8 is available
bool CanBeLoadedOCI8()
{
	if(g_hORA8DLL)
		return true;	// already loaded

	return true;/*		try
	{
		long nVersion = ::SAGetFileVersionFromString(g_sORA8DLLName);
		return HIWORD(nVersion) >= 8;
	}
	catch(SAException &)
	{
	}

	return false;
*/}

static void LoadAPI()
{
	// 8.0.x calls
	g_ora8API.OCIInitialize	= (OCIInitialize_t)dlsym(g_hORA8DLL, "OCIInitialize");	assert(g_ora8API.OCIInitialize != NULL);
	g_ora8API.OCIHandleAlloc	= (OCIHandleAlloc_t)dlsym(g_hORA8DLL, "OCIHandleAlloc");	assert(g_ora8API.OCIHandleAlloc != NULL);
	g_ora8API.OCIHandleFree	= (OCIHandleFree_t)dlsym(g_hORA8DLL, "OCIHandleFree");	assert(g_ora8API.OCIHandleFree != NULL);
	g_ora8API.OCIDescriptorAlloc	= (OCIDescriptorAlloc_t)dlsym(g_hORA8DLL, "OCIDescriptorAlloc");	assert(g_ora8API.OCIDescriptorAlloc != NULL);
	g_ora8API.OCIDescriptorFree	= (OCIDescriptorFree_t)dlsym(g_hORA8DLL, "OCIDescriptorFree");	assert(g_ora8API.OCIDescriptorFree != NULL);
	g_ora8API.OCIEnvInit	= (OCIEnvInit_t)dlsym(g_hORA8DLL, "OCIEnvInit");	assert(g_ora8API.OCIEnvInit != NULL);
	g_ora8API.OCIServerAttach	= (OCIServerAttach_t)dlsym(g_hORA8DLL, "OCIServerAttach");	assert(g_ora8API.OCIServerAttach != NULL);
	g_ora8API.OCIServerDetach	= (OCIServerDetach_t)dlsym(g_hORA8DLL, "OCIServerDetach");	assert(g_ora8API.OCIServerDetach != NULL);
	g_ora8API.OCISessionBegin	= (OCISessionBegin_t)dlsym(g_hORA8DLL, "OCISessionBegin");	assert(g_ora8API.OCISessionBegin != NULL);
	g_ora8API.OCISessionEnd	= (OCISessionEnd_t)dlsym(g_hORA8DLL, "OCISessionEnd");	assert(g_ora8API.OCISessionEnd != NULL);
	g_ora8API.OCILogon	= (OCILogon_t)dlsym(g_hORA8DLL, "OCILogon");	assert(g_ora8API.OCILogon != NULL);
	g_ora8API.OCILogoff	= (OCILogoff_t)dlsym(g_hORA8DLL, "OCILogoff");	assert(g_ora8API.OCILogoff != NULL);
	g_ora8API.OCIPasswordChange	= (OCIPasswordChange_t)dlsym(g_hORA8DLL, "OCIPasswordChange");	assert(g_ora8API.OCIPasswordChange != NULL);
	g_ora8API.OCIStmtPrepare	= (OCIStmtPrepare_t)dlsym(g_hORA8DLL, "OCIStmtPrepare");	assert(g_ora8API.OCIStmtPrepare != NULL);
	g_ora8API.OCIBindByPos	= (OCIBindByPos_t)dlsym(g_hORA8DLL, "OCIBindByPos");	assert(g_ora8API.OCIBindByPos != NULL);
	g_ora8API.OCIBindByName	= (OCIBindByName_t)dlsym(g_hORA8DLL, "OCIBindByName");	assert(g_ora8API.OCIBindByName != NULL);
	g_ora8API.OCIBindObject	= (OCIBindObject_t)dlsym(g_hORA8DLL, "OCIBindObject");	assert(g_ora8API.OCIBindObject != NULL);
	g_ora8API.OCIBindDynamic	= (OCIBindDynamic_t)dlsym(g_hORA8DLL, "OCIBindDynamic");	assert(g_ora8API.OCIBindDynamic != NULL);
	g_ora8API.OCIBindArrayOfStruct	= (OCIBindArrayOfStruct_t)dlsym(g_hORA8DLL, "OCIBindArrayOfStruct");	assert(g_ora8API.OCIBindArrayOfStruct != NULL);
	g_ora8API.OCIStmtGetPieceInfo	= (OCIStmtGetPieceInfo_t)dlsym(g_hORA8DLL, "OCIStmtGetPieceInfo");	assert(g_ora8API.OCIStmtGetPieceInfo != NULL);
	g_ora8API.OCIStmtSetPieceInfo	= (OCIStmtSetPieceInfo_t)dlsym(g_hORA8DLL, "OCIStmtSetPieceInfo");	assert(g_ora8API.OCIStmtSetPieceInfo != NULL);
	g_ora8API.OCIStmtExecute	= (OCIStmtExecute_t)dlsym(g_hORA8DLL, "OCIStmtExecute");	assert(g_ora8API.OCIStmtExecute != NULL);
	g_ora8API.OCIDefineByPos	= (OCIDefineByPos_t)dlsym(g_hORA8DLL, "OCIDefineByPos");	assert(g_ora8API.OCIDefineByPos != NULL);
	g_ora8API.OCIDefineObject	= (OCIDefineObject_t)dlsym(g_hORA8DLL, "OCIDefineObject");	assert(g_ora8API.OCIDefineObject != NULL);
	g_ora8API.OCIDefineDynamic	= (OCIDefineDynamic_t)dlsym(g_hORA8DLL, "OCIDefineDynamic");	assert(g_ora8API.OCIDefineDynamic != NULL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -