OTL之oralce开发总结

来源:Oracle认证    发布时间:2012-11-12    Oracle认证视频    评论

1 2 下一页

关于OTL,网上介绍的也不少,但看来看去也只是官方的那些文档。OTL很好用,结合官方提供的一些例子,多多尝试才能领悟。经过一个月左右的项目开发,对OTL也有些了解,在这里总结一下,希望对刚接触OTL的新手有所帮助。其中有些地方,比如对网络异常的处理,可是费了我两天的时间才解决的,我那个汗哪。废话少说,开始正题:

  一、开始前的准备工作

  在使用OTL进行编程之前,要首先确定使用的Oralce版本以及所选用的字符集。OTL支持目前几乎所有的主流数据库,可以通过宏启用otlv4.h中对应的数据库操作接口。

  如:使用Oracle 11g R2、字符集选择UTF8,则可在包含otlv4.h之前声明以下两个宏:

  #define OTL_ORA11G_R2

  #define OTL_ORA_UTF8

  #include "otlv4.h"

  ....

  一、常用类及其常用成员

  1. otl_connect类

  static int otl_initialize(const int threaded_mode=0):

  用于初始化OTL环境的静态函数,参数指定是用于多线程还是单线程。它不保证线程安全,也就是说,如果多个线程共享使用一个otl_connect对象,需要加锁进行控制。有个同事因为在多线程环境下使用了默认的参数0,就导致了程序异常。但是单线程环境下,参数设1是没有问题的。所以,可以考虑将此参数直接设为1。

  void rlogon(...):

  这个函数有多个版本,请注意参考官方文档中与相应数据库版本对应的函数声明。11g中用到的参数说明如下:

  const char *connect_str:连接字符串,格式为:"用户名/密码@数据库服务名"

  const int aauto_commit:自动提交模式。若此参数设为0(默认),则通过此连接对象执行的事务不会自动提交。如使用direct_exec执行删除记录的操作时,需要手动调用commit()成员函数提交事务;若设为1则通过此otl_connect对象开启的事务会自动提交。

  long direct_exec(...):

  const char *sqlstm: 指定所要执行的“静态SQL语句”,即不产生输入或输出的SQL语句。如delete from book where name='C++‘ 。但是不能执行如select sysdate from dual或select * from book亦或delete from book where name=:f1之类的语句,因为它们会带有输入或输出,此类SQL语句可以通过otl_stream实现,下面会有介绍。

  int ignore_error:是否忽略异常。可以指定otl_exception::disable禁用异常,否则程序需要使用try...catch(otl_exception &e)...捕获并处理异常。

  int connected:

  此成员变量标识了连接对象是否连接成功,一旦连接成功其值即为1。即便后来网络断掉了,此值仍旧保持不变,logoff()后此值变为0。所以此变量只能用于检查rlogon是否连接成功,而不能判断当前与数据库的连接是否正常。

2. otl_stream类

  void open(...):

  为流对象关联一个SQL语句,可以是带输入或输出的SQL语句或PL/SQL块。

  const int arr_size:指定流缓冲区的大小。作为输出流使用时,若输出缓冲区中的记录数达到此值即缓冲区满时,会自动刷新缓冲区,若已设设置了自动提交则一并提交数据(默认);

  const char *sqlstm:SQL语句,可以指定绑定变量,如:delete from book where id = :f1 and price = :f2;

  otl_connect &db:流所使用的数据库连接对象。

  void set_commit(int auto_commit=0):

  设置流被刷新时否自动提交事务。两种条件下流会被刷新:a.缓冲区满 b.手动调用flush成员函数

  void flush(...):

  执行和流关联的SQL语句。如执行:

  otl_stream delStream;

  delStream.open(100, delete from book where id = :f1 and price = :f2, dbConnect); //正常情况下向流中加入100条记录时才执行删除

  delStream << 1;

  delSteam << 'C++';

  delStream.flush(); //立即执行删除操作,尽管当前流中只有一条记录

  long get_rpc():

  获取流中SQL语句执行后所影响到的记录数,如插入100条记录,则调用此函数返回的即为100

  int good():

  判断流对象是否已正常打开,已打开返回1。注意:若复用一个流对象时,必须先调用close函数将其关闭,然后再调用open重新打开。

上一篇: 甲骨文与谷歌Android诉讼将进行第三次和解会议
下一篇: 甲骨文计划更多地收购具体行业的软件公司

1 2 下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答