亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? statement.cpp

?? tocci是用C編寫(xiě)的建立在OCI基礎(chǔ)之上的對(duì)ORACLE的接口進(jìn)行調(diào)用,和OCCI操作類(lèi)似,簡(jiǎn)化了OCI復(fù)雜的調(diào)用.在LINUX下使用.
?? CPP
字號(hào):
/*

Copyright (c) 2003, Confident Outsourcing
All rights reserved.

Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, 
this list of conditions and the following disclaimer. 

Redistributions in binary form must reproduce the above copyright notice, 
this list of conditions and the following disclaimer in the documentation 
and/or other materials provided with the distribution. 

Neither the name of the Confident Outsourcing nor the names of its 
contributors may be used to endorse or promote products derived from 
this software without specific prior written permission. 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/
#include "tocci/tocci.h"

using namespace oracle::occi;

#define OASSERT(x) if ((x)!=OCI_SUCCESS && (x)!=OCI_SUCCESS_WITH_INFO) throw(*new SQLException(errhp));

Statement::Statement(Connection *con,const char *q)
	: envhp(con->getEnvironment()->getOCIEnviroment()),
	errhp(con->getEnvironment()->getOCIError()),
	svchp(con->getOCIServiceContext()),
	query(q),autoCommit(false) {

	int r=0;
	r=OCIHandleAlloc(envhp, (void **)&stmt, OCI_HTYPE_STMT, (CONST size_t) 0, (dvoid **) 0);

	if (r!=OCI_SUCCESS && r!=OCI_SUCCESS_WITH_INFO) throw(*new SQLException(errhp));
	r=OCIStmtPrepare (stmt, errhp,
		(unsigned char *)query.c_str(), query.length(), OCI_NTV_SYNTAX, OCI_DEFAULT);
	if (r!=OCI_SUCCESS && r!=OCI_SUCCESS_WITH_INFO) {
		throw(*new SQLException(errhp));
	}
}

Statement::~Statement() {
	OCIHandleFree((void **)stmt, OCI_HTYPE_STMT);
}


void Statement::setPrefetchRowCount(int pfc) {
  if (OCIAttrSet (stmt,
                  OCI_HTYPE_STMT,
                  &pfc, 
                  0,
                  OCI_ATTR_PREFETCH_ROWS,
                  errhp)) throw(*new SQLException(errhp));
}

void Statement::registerOutParam(int pos, int type) {
	int r;
	if (pos>=MAX_BINDS) throw(SQLException(3, "Cannot bind such index (too big)" ));
	var[pos].type=type;
	switch(type) {
	case OCCIUNSIGNED_INT:
		var[pos].data_len=sizeof(unsigned int);
		var[pos].data=realloc(var[pos].data, var[pos].data_len);
		break;
	case OCCICURSOR:
		var[pos].data_len=0;
		var[pos].data=realloc(var[pos].data, sizeof(OCIStmt *));
		*((OCIStmt **)var[pos].data)=NULL;
		r=OCIHandleAlloc(envhp, (void **)var[pos].data, OCI_HTYPE_STMT, (CONST size_t) 0, (dvoid **) 0);
		OASSERT(r);
		break;

	default: throw(SQLException(4, "Unknown type. TOCCI doesnt support this type of OUT parameter"));
	}
}

int Statement::executeUpdate() {  
	ResultSet *rs=executeQuery();
	closeResultSet(rs);
	return 0;
}


ResultSet *Statement::executeQuery() {
	int i, r;
	char bname[8];
	ub2 type;

	int iter;//must be zero only for select ! OCI_ATTR_STMT_TYPE OCI_STMT_SELECT
	r=OCIAttrGet(stmt, OCI_HTYPE_STMT, &type, 0, OCI_ATTR_STMT_TYPE, errhp);
	OASSERT(r);
	iter=(type==OCI_STMT_SELECT)?0:1;

	for(i=1; i<MAX_BINDS; i++) if (var[i].data_len!=-1) {
//		printf("Bind var: %d\n", i);
		sprintf(bname, ":v%d", i);
		r=OCIBindByName(stmt, &var[i].bindhp, errhp, (unsigned char *)bname, strlen(bname), 
			var[i].data, var[i].data_len, var[i].type, 
			NULL, NULL, NULL, 0, NULL, OCI_DEFAULT);
		OASSERT(r);

		if (var[i].type==SQLT_NTY || var[i].type==SQLT_NCO) {
			//indpp=NULL;
			r=OCIBindObject(var[i].bindhp, errhp, var[i].oci_type, 
				(void**)var[i].data, NULL, NULL, NULL);
			OASSERT(r);
		}
	}

	r=OCIStmtExecute(svchp, stmt, errhp, iter, 0, NULL, NULL, (autoCommit)?OCI_COMMIT_ON_SUCCESS:OCI_DEFAULT);
	OASSERT(r);
	return (type==OCI_STMT_SELECT)?new ResultSet(stmt, errhp):new ResultSet();
}

unsigned int Statement::getUInt(int pos) {
	if (var[pos].data_len==-1) throw(*new SQLException(10, "You havent bind that index"));
	return *((unsigned int*)var[pos].data);
}

void Statement::setUInt(int pos, unsigned int val) {
	var[pos].type=OCCIUNSIGNED_INT;
	var[pos].data=realloc(var[pos].data, sizeof(val));
	memcpy(var[pos].data, &val, sizeof(val));
	var[pos].data_len=sizeof(val);
}

void Statement::setString(int pos, const string &str) {
	var[pos].type=SQLT_STR;
	//var[pos].data=(void*)strdup(str.c_str());
	var[pos].data=realloc(var[pos].data, str.length()+1);
	strcpy((char*)var[pos].data, str.c_str());
	var[pos].data_len=str.length()+1;
}

ResultSet * Statement::getCursor(int pos) {
	OCIStmt *st=*((OCIStmt **)var[pos].data);
	return new ResultSet(st, errhp);
}

bool Statement::getAutoCommit() const {
	return autoCommit;
}

void Statement::setAutoCommit(bool ac) {
	autoCommit=ac;
}


void Statement::closeResultSet(ResultSet *rs) {delete rs;}


void Statement::setVector(int pos, const vector<PObject*> &v, const char *type) {
	int r;

	OCIType *t;
	OCIType *coll_type;
	OCIColl **coll;
	void *obj_inst;

	var[pos].type=SQLT_NTY;
	var[pos].data_len=sizeof(OCIColl*);
	var[pos].data=realloc(var[pos].data, sizeof(OCIColl*));
	coll=(OCIColl**)var[pos].data;

	r=OCITypeByName(envhp, errhp, svchp, 
			NULL, -1, (unsigned char*)type, strlen(type), 
			NULL, -1, OCI_DURATION_SESSION, OCI_TYPEGET_HEADER, &coll_type);
	OASSERT(r);
	r=OCIObjectNew(envhp, errhp, svchp, OCI_TYPECODE_NAMEDCOLLECTION, coll_type, 
		NULL, OCI_DURATION_SESSION, TRUE, (dvoid**)coll);
	OASSERT(r);
	var[pos].oci_type=coll_type;

	for (vector<PObject*>::const_iterator i=v.begin(); i!=v.end(); i++) {
		PObject * obj=(*i);
		r=OCITypeByName(envhp, errhp, svchp, 
			NULL, -1, (unsigned char*)obj->getSQLTypeName().c_str(), obj->getSQLTypeName().length(), 
			NULL, -1, OCI_DURATION_SESSION, OCI_TYPEGET_HEADER, &t);
		OASSERT(r);
		r=OCIObjectNew(envhp, errhp, svchp, SQLT_NTY, t, NULL, OCI_DURATION_SESSION, TRUE, (dvoid**)&obj_inst);
		OASSERT(r);
		/*
		OBJECT ATTR SET !
		*/

		vector<AnyDataElement> obj_meta;
		AnyData obj_data(&obj_meta);
		obj->writeSQL(obj_data);
		for(vector<AnyDataElement>::iterator ae=obj_meta.begin(); ae!=obj_meta.end(); ae++) {
			AnyDataElement e=(*ae);

			text *names[1];
			ub4 lengths[1];
			
			names[0]=(text*)e.name.c_str();
			lengths[0]=e.name.length();
			OCINumber val;
			r=OCINumberFromInt(errhp, &e.value, sizeof(e.value), OCI_NUMBER_SIGNED, &val);
			OASSERT(r);

			r=OCIObjectSetAttr(envhp, errhp, obj_inst, NULL, t, (text**)names, lengths, 1, 0, 0, NULL, NULL, &val);
			OASSERT(r);
		}

		r=OCICollAppend(envhp, errhp, obj_inst, NULL, *coll);
		OASSERT(r);
	}

//	memcpy(var[pos].data, &coll, sizeof(coll));
}
/*	string sum(type);
	string sql;
	AnyData  data(&sql);
	var[pos].data=strdup("\"TAB_KEYWORDS\"()");
	var[pos].type=SQLT_STR;
	var[pos].data_len=0;

	sum.append("(");

	for (vector<PObject*>::const_iterator i=v.begin(); i!=v.end(); i++) {
		sql="KEYWORD(";
		PObject * obj=(*i);
		obj->writeSQL(data);
		sql.resize(sql.length()-2);
		sql.append(")");

		sum.append(sql);
		sum.append("  ");
	}
	sum.resize(sum.length()-2);
	sum.append(" )");
	//printf("%s", sum.c_str());
	var[pos].data=strdup(sum.c_str());
	var[pos].data_len=sum.length()+1;
	var[pos].type=SQLT_STR;
*/
/*		
		text *names[4];
		ub4 lengths[4];

		names[0]=(text*)"WORD_ID";
		lengths[0]=strlen((char*)names[0]);
		names[1]=(text*)"CASE_MASK";
		lengths[1]=strlen((char*)names[1]);
		names[2]=(text*)"TYPE";
		lengths[2]=strlen((char*)names[2]);
		names[3]=(text*)"LENGTH";
		lengths[3]=strlen((char*)names[3]);
		text * val=(text*)"1";

		r=OCIObjectSetAttr(envhp, errhp, ref, NULL, t, (text**)names, lengths, 
			4, 0, 0,	NULL, NULL, val);
		OASSERT(r);
*/
/*
		keyword_t k;
		int c=10;
		r=OCINumberFromInt(errhp, &c, sizeof(c), OCI_NUMBER_SIGNED, &k.a);
		OASSERT(r);
		c=1;
		r=OCINumberFromInt(errhp, &c, sizeof(c), OCI_NUMBER_SIGNED, &k.b);
		OASSERT(r);
		c=0;
		r=OCINumberFromInt(errhp, &c, sizeof(c), OCI_NUMBER_SIGNED, &k.c);
		OASSERT(r);
		r=OCINumberFromInt(errhp, &c, sizeof(c), OCI_NUMBER_SIGNED, &k.d);
		OASSERT(r);
*/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清视频在线高清观看mv色露露十八| 色吧成人激情小说| 中文字幕日韩欧美一区二区三区| 色婷婷一区二区| 精品一区二区精品| 国产精品亚洲一区二区三区妖精| 亚洲精品国产a| 久久精品一区二区三区av| 欧美性生活影院| 不卡一区二区三区四区| 欧美aaa在线| 亚洲影院在线观看| 亚洲国产高清不卡| 精品日产卡一卡二卡麻豆| 91福利区一区二区三区| 国产成人精品免费在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲激情六月丁香| 国产精品毛片久久久久久| 欧美精品一区二区不卡| 欧美一区二区精品| 欧美日韩免费电影| 欧美性生活久久| 91麻豆国产福利在线观看| 国产成人自拍网| 国产自产v一区二区三区c| 日韩av二区在线播放| 午夜婷婷国产麻豆精品| 亚洲一区二区三区美女| 亚洲欧洲综合另类在线| 国产精品传媒视频| 国产精品久久免费看| 国产亚洲精品aa| 国产日产欧美精品一区二区三区| 久久综合久久综合亚洲| 精品不卡在线视频| 日韩欧美成人一区二区| 日韩视频永久免费| 日韩久久久久久| wwwwww.欧美系列| 久久亚洲一区二区三区明星换脸| 欧美另类z0zxhd电影| 欧美片在线播放| 69久久夜色精品国产69蝌蚪网| 最新日韩av在线| 国产日产精品一区| 国产精品伦一区| 国产精品美女一区二区在线观看| 精品欧美乱码久久久久久1区2区| 日韩亚洲欧美在线| 欧美一区二区三区成人| 日韩一级片网址| ww亚洲ww在线观看国产| 欧美videossexotv100| 久久先锋影音av| 久久久91精品国产一区二区精品| 337p日本欧洲亚洲大胆精品| 国产肉丝袜一区二区| 国产精品毛片久久久久久| 一区二区三区电影在线播| 亚洲激情图片小说视频| 亚洲高清免费在线| 久久99久久99小草精品免视看| 国产麻豆一精品一av一免费| 国产麻豆精品theporn| 成人性视频网站| 91女人视频在线观看| 欧美日本精品一区二区三区| 日韩欧美亚洲一区二区| 精品国产区一区| 国产精品美女www爽爽爽| 亚洲自拍偷拍欧美| 日韩一区精品视频| 国产在线播放一区三区四| 成人午夜碰碰视频| 欧美日韩aaaaaa| 久久精品日韩一区二区三区| 自拍偷拍亚洲欧美日韩| 亚洲成国产人片在线观看| 久久精品999| 99在线热播精品免费| 欧美午夜片在线看| 久久久久亚洲蜜桃| 亚洲精品va在线观看| 日本色综合中文字幕| 成人丝袜18视频在线观看| 色88888久久久久久影院按摩| 欧美一卡二卡在线观看| 欧美韩日一区二区三区四区| 亚洲午夜影视影院在线观看| 蜜臀久久久久久久| 97久久精品人人做人人爽| 91精品在线观看入口| 欧美国产综合一区二区| 婷婷国产v国产偷v亚洲高清| www.亚洲色图| 欧美一级国产精品| 亚洲欧美一区二区三区孕妇| 极品少妇一区二区三区精品视频| av亚洲精华国产精华精| 精品国产麻豆免费人成网站| 怡红院av一区二区三区| 国产精品一区免费视频| 欧美精品视频www在线观看| 亚洲国产经典视频| 蜜桃精品视频在线| 欧美日韩三级一区| 国产精品久久精品日日| 久久99国产乱子伦精品免费| 欧美综合天天夜夜久久| 中文一区在线播放| 韩国成人在线视频| 欧美美女直播网站| 夜夜嗨av一区二区三区四季av| 国产伦精品一区二区三区免费迷 | 成人性色生活片| 欧美成人一区二区| 亚洲国产日韩综合久久精品| aaa亚洲精品| 国产色婷婷亚洲99精品小说| 蜜桃av一区二区在线观看 | 欧美一区二区三区白人| 亚洲黄色片在线观看| 粉嫩高潮美女一区二区三区| 日韩三级视频在线看| 亚洲成av人片在线| 在线观看一区二区视频| 中文字幕人成不卡一区| 国产传媒日韩欧美成人| 欧美一级爆毛片| 日韩高清一区二区| 欧美日韩亚洲丝袜制服| 亚洲精品成人a在线观看| 91免费观看视频在线| 亚洲色欲色欲www| a在线播放不卡| 国产精品不卡一区| 91美女在线视频| 亚洲欧美激情小说另类| 成人国产免费视频| 国产精品每日更新| 91色porny在线视频| 伊人婷婷欧美激情| 在线观看亚洲一区| 亚洲第一在线综合网站| 欧美日韩专区在线| 日本va欧美va欧美va精品| 91精品国产一区二区三区| 美女视频黄久久| 精品国产免费人成在线观看| 国产一区二区三区美女| 中文一区二区完整视频在线观看| 国产精品一二三四| 国产精品无人区| av在线一区二区| 亚欧色一区w666天堂| 欧美人狂配大交3d怪物一区| 日韩成人午夜精品| 欧美精品一区二区在线观看| 国产一区二区导航在线播放| 国产精品乱码久久久久久| jlzzjlzz欧美大全| 亚洲成人在线网站| 日韩欧美一区二区视频| 国产麻豆成人传媒免费观看| 国产精品久久久久影院老司| 日本韩国欧美一区| 婷婷综合另类小说色区| 日韩女优毛片在线| 成人黄动漫网站免费app| 一区二区三区毛片| 6080午夜不卡| 国产丶欧美丶日本不卡视频| 亚洲免费在线视频一区 二区| 在线看国产一区二区| 日本欧美一区二区在线观看| 国产日本一区二区| 欧美性感一区二区三区| 久久狠狠亚洲综合| 亚洲激情校园春色| 欧美成人vr18sexvr| 成年人国产精品| 天天综合日日夜夜精品| 国产日产欧美精品一区二区三区| 色综合天天综合给合国产| 男人的天堂久久精品| 国产精品久久久久久久久免费丝袜| 91福利在线免费观看| 久久97超碰国产精品超碰| 成人免费视频在线观看| 日韩欧美电影在线| 在线一区二区视频| 国产九色sp调教91| 亚洲午夜精品网| 中文字幕乱码亚洲精品一区| 欧美网站大全在线观看| 粗大黑人巨茎大战欧美成人| 亚洲福利一区二区| 中文字幕免费不卡在线| 日韩欧美高清在线|