闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗銆掑锝呬壕濡ょ姷鍋為悧鐘汇€侀弴銏犖ч柛灞剧煯婢规洖鈹戦缁撶細闁告鍐f瀺鐎广儱娲犻崑鎾舵喆閸曨剛顦繝鈷€鍕垫疁妤犵偛妫濆顕€宕煎顏佹櫊閹鏁愭惔婵堝嚬閻庣懓鎲$换鍕閹烘挻缍囬柕濞垮劤閻熴劌顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秶鍠栭幃娆撳箣濠靛洤顦╅梺鎶芥敱閸ㄥ湱妲愰幘瀛樺濠殿喗鍩堟禍婵嬪箞閵娾晛鐐婇柕濞垮€楃粻姘渻閵堝棛澧柣鏃戝墴閻擃剟顢楅崒妤€浜鹃悷娆忓绾炬悂鏌涙惔锝嗘毈鐎殿噮鍋婇獮妯肩磼濡粯顏熼梻浣芥硶閸o箓骞忛敓锟�濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁炬儳顭烽弻锝夊箛椤掍焦鍎撶紓浣哄С閸楁娊寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磽娴e搫啸闁哥姵鐗犲濠氬Ω閳哄倸浜滈梺鍛婄箓鐎氬懘濮€閵堝棛鍘遍梺闈浨归崕閬嶅焵椤掆偓濠€閬嶅箲閵忕姭妲堥柕蹇曞Т閼板灝鈹戦埥鍡楃仴妞ゆ泦鍥棄鐎广儱顦伴埛鎴犵磼鐎n偒鍎ラ柛搴㈠姉缁辨帞鎷犻幓鎺撴婵犵绱曢弫璇茬暦閻旂⒈鏁嶆慨妯夸含閺夋悂姊绘担鍝ユ瀮婵℃ぜ鍔庨幏瀣蓟閵夈儳锛涢梺瑙勫礃椤曆囧礃閳ь剟鎮峰⿰鍐炬█鐎殿喗鎮傚顕€宕奸悢鍝勫汲闂備胶绮ú鏍磹閸︻厸鍋撳鐐
开发学院数据库Oracle DM API和OCI编程方式比较 阅读

DM API和OCI编程方式比较

 2008-09-03 12:50:56 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愯姤鎱ㄥ鍡楀幊缂傚倹姘ㄩ幉绋款吋閸澀缃曢梻鍌欑濠€閬嶆惞鎼淬劌绐楅柡宥庡亞娑撳秵銇勯弽顐沪闁绘挶鍎甸弻锝夊即閻愭祴鍋撻崷顓涘亾濮樼偓瀚�闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗銆掑锝呬壕濡ょ姷鍋涢ˇ鐢稿极閹剧粯鍋愰柟缁樺笧閳ь剦鍙冨鍝勑ч崶褏浠奸梺璇茬箲閼归箖鎮鹃悜钘夎摕闁靛濡囬崢鐢告⒑鐟欏嫷鍟忛柛鐘崇墵閵嗗倹绺介崨濠勫幈闁硅壈鎻槐鏇熺墡闂備線娼уú銈団偓姘嵆閻涱噣骞掑Δ鈧粻锝嗙節闂堟稑鏆欏ù婊堢畺閺岋綁濮€閳惰泛婀辨竟鏇熺節濮橆厾鍘甸梺缁樺姦閸撴岸鎮樻潏銊ょ箚闁圭粯甯炴晶娑氱磼缂佹ḿ娲寸€规洖宕灃闁告劕鍟犻崜婵堟崲濞戞ḿ鏆嗗┑鐘辫兌閺佹牜绱撴担浠嬪摵闁圭懓娲ら悾鐑藉箳閹搭厽鍍甸梺鐟板悁閻掞箓鎮楅幖浣光拻濞达絿鍎ら崵鈧梺鎼炲€栭悧鐘荤嵁韫囨稒鏅搁柨鐕傛嫹婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繑銇勯幘鍗炵仼缂佺媭鍨堕弻娑㈠箛闂堟稒鐏堥悗鐟版啞缁诲啴濡甸崟顖氱閻庨潧鎽滈悾濂告⒑绾拋娼愭繛鑼枎椤繒绱掑Ο鑲╂嚌闂侀€炲苯澧畝锝堝劵椤︽煡鎮¢妶澶嬬厪闁割偅绻冮崑顏呯箾瀹割喕绨婚幆鐔兼⒑鐎圭姵銆冮柤鍐茬埣瀹曟繈鏁冮埀顒勨€旈崘顔嘉ч柛鈩冾殘閻熸劙姊洪悡搴℃毐闁绘牕銈稿畷鐑樼節閸パ冨祮闂侀潧楠忕槐鏇㈠储椤忓牊鈷戦柟鑲╁仜閸旀鏌¢崨顔锯姇缂佸倹甯熼ˇ瀵哥磼鏉堛劌绗氭繛鐓庣箻閸┾剝鎷呴柨瀣垫綗闂傚倷娴囧銊╂倿閿曞倸绠查柛銉墮閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愯姤鎱ㄥ鍡楀幊缂傚倹姘ㄩ幉绋款吋閸澀缃曢梻鍌欑濠€閬嶆惞鎼淬劌绐楅柡宥庡亞娑撳秵銇勯弽顐沪闁绘挶鍎甸弻锝夊即閻愭祴鍋撻崷顓涘亾濮樼偓瀚�  闂傚倸鍊搁崐鎼佸磹閹间礁纾归柣鎴eГ閸ゅ嫰鏌ら崫銉︽毄濞寸姵姘ㄧ槐鎾诲磼濞嗘帒鍘$紓渚囧櫘閸ㄥ爼濡撮崘顔煎窛闁哄鍨归崢娲倵楠炲灝鍔氭い锔诲灦瀹曪繝骞庨懞銉у帾闂婎偄娲﹀ú鏍ㄧ墡闂備浇顕х€垫帡宕滈悢濂夋綎闁惧繐婀辩壕鍏间繆椤栨碍鎯堟い顐㈢Т椤啴濡堕崱妤€顫庨梺鍛婎焼閸パ呭弨婵犮垼娉涜癌闁绘柨鍚嬮悡銉╂倵閿濆骸鍘撮柛瀣尰缁绘繂顫濋娑欏闁荤喐绮庢晶妤冩暜閹烘挾顩插ù鐓庣摠閻撴洟鏌熼幆褜鍤熼柍钘夘樀閺屽秶绱掑Ο鑽ゅ弳濡炪値鍋呯换鍫ュ箠濠婂懎鏋堟俊顖濐嚙椤忓綊姊婚崒娆戭槮闁硅绱曠划娆撳箣閿斿搫浜奸梺鍝勵槹閸ㄧ喖寮搁弮鍫熺厸闁告劧绲芥禍鍓х磽娴h櫣甯涚紒瀣尰缁傛帡鏁冮崒姘憋紲濠殿喗锕╅崜锕傛倵閹惰姤鈷掑ù锝呮憸閿涘秶绱掗鍛仸妤犵偞鍨垮畷鍫曨敆閸屾氨銈﹂梺璇插嚱缂嶅棙绂嶉弽顓炵哗濞寸姴顑嗛悡娆撴⒑椤撱劎鐣卞褜鍨遍妵鍕棘閸喒鍋撶憴鍕攳濠电姴娲﹂崐閿嬨亜韫囨挸顏ら柛瀣崌瀵€燁檨婵炲吋鐗曢埞鎴︽偐鐎圭姴顥濋梺绋胯閸斿酣骞夊宀€鐤€婵炴垶岣块悿鍛存⒑閸︻叀妾搁柛鐘愁殜瀵煡骞栨担鍦弳闂佺粯娲栭崐鍦偓姘炬嫹
核心提示: intc1;intlen1;intc2[101];intlen2;c2[100]=0;//执行查询语句生成结果集dm_direct_exec(hstmt,“selectc1,c2fromt”);//绑定第一列dm_bind_column(hstmt,1,DM_DAT

   intc1;
  intlen1;
  intc2[101];
  intlen2;
  c2[100]=0;
  //执行查询语句生成结果集
  dm_direct_exec(hstmt,“selectc1,c2fromt”);
  //绑定第一列
  dm_bind_column(hstmt,1,DM_DATA_INT,TYPE_INT,&c1,4,&len1,0);
  //绑定第二列
  dm_bind_column(hstmt,2,DM_DATA_CHAR,TYPE_CHAR,c2,100,&len2,0);
  //提取结果集
  while(dm_fetch(hstmt,NULL)==0){
  printf("c1:%d,c2:%s",c1,c2);
  }
  //提取完以后需要关闭游标句柄
  dm_close_stmt(hstmt);

b) OCI

OCI在绑定的时候只有一种形式,通过调用OCIDefineByPos来实现对每个列的绑定,如果你需要一次性获取多行,你还需要调用OCIDefineArrayOfStruct函数来约定每个值跟下一个值之间的偏移量。一次性获取的行数可以在OCIStmtExecute或OCIStmtFetch函数中指定,下面列出对OCIDefineByPos的注释:

   swordOCIDefineByPos(
  OCIStmt*stmtp,/*语句句柄*/
  OCIDefine**defnp,/*绑定输出指针*/
  OCIError*errhp,/*错误句柄*/
  ub4position,/*绑定列的位置*/
  dvoid*valuep,/*缓冲区指针*/
  sb4value_sz,/*单个值的大小*/
  ub2dty,/*要转化成的OCI数据类型*/
  dvoid*indp,/*空值指示符*/
  ub2*rlenp,/*实际返回长度指示符*/
  ub2*rcodep,/*下面两参数为保留参数*/
  ub4mode
  )

跟据上面API的例子,在这里给出OCI的代码:

   intc1;
  intlen1;
  intc2[101];
  intlen2;
  c2[100]=0;
  text*sqlstmt=(text*)"selectc1,c2fromt";
  //在绑定前先要准备语句
  OCIStmtPrepare(stmthp,errhp,sqlstmt,(ub4)strlen((char*)sqlstmt),
  (ub4)OCI_NTV_SYNTAX,(ub4)OCI_DEFAULT);
  //绑定第一列
  OCIDefineByPos(stmthp,NULL,errhp,(ub4)1,
  (dvoid*)&c1,(sb4)sizeof(int),(ub2)SQLT_INT,
  (dvoid*)0,(ub2*)0,(ub2*)0,(ub4)OCI_DEFAULT)
  //绑定第二列
  OCIDefineByPos(stmthp,NULL,errhp,(ub4)2,
  (dvoid*)c2,(sb4)100,(ub2)SQLT_AFC,
  (dvoid*)0,(ub2*)0,(ub2*)0,(ub4)OCI_DEFAULT)
  OCIStmtExecute(svchp,stmthp,errhp,(ub4)0,(ub4)0,(CONSTOCISnapshot*)0,(OCISnapshot*)0,(ub4)OCI_DEFAULT);
  //在这里每次提取一行
  while(OCIStmtFetch(stmthp,errhp,1,OCI_FETCH_NEXT,0)==0){
  printf("c1:%d,c2:%s",c1,c2);
  }

6. 释放连接

a) API

在执行完所有的SQL操作以后,需要断开跟数据库服务器的连接。API在断开时需要释放所申请的所有句柄,包括语句句柄,连接句柄和环境句柄,语句句柄需要在断开连接之前释放。

  dm_close_stmt(hstmt);
  /*释放语句句柄*/
  dm_free_stmt(hstmt);
  /*断开与数据源之间的连接*/
  dm_logout(hdbc);
  /*释放连接句柄*/
  dm_free_connect(hdbc);
  /*释放环境句柄*/
  dm_free_env(henv);

b) OCI

OCI跟API一样,断开连接以后需要释放所有的句柄,这些释放工作都是通过调用OCIHandleFree来完成,例子可以参看连接部分的代码。

7. 结束语

我们可以看到,API和OCI在使用上都有几份类似,在连接和释放上面,两者区别不大,但是在参数和结果集绑定上面,API使用的时候比较的灵活多变,有很多参数可以灵活的指定,但是使用起来感觉比较复杂,而OCI则简单多了,但是同样可以实现API绑定的大部分功能。如果想要更详细的了解API和OCI,那么请参看ODBC标准手册和ORACLE的OCI说明手册,哪上面有更加详细的使用介绍。

上一页  1 2 3 4 5 6 

Tags:DM API OCI

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接