OTL数据库访问技术.ppt

上传人:小飞机 文档编号:5442406 上传时间:2023-07-07 格式:PPT 页数:38 大小:257.50KB
返回 下载 相关 举报
OTL数据库访问技术.ppt_第1页
第1页 / 共38页
OTL数据库访问技术.ppt_第2页
第2页 / 共38页
OTL数据库访问技术.ppt_第3页
第3页 / 共38页
OTL数据库访问技术.ppt_第4页
第4页 / 共38页
OTL数据库访问技术.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《OTL数据库访问技术.ppt》由会员分享,可在线阅读,更多相关《OTL数据库访问技术.ppt(38页珍藏版)》请在三一办公上搜索。

1、OTL数据库访问技术,北京神州数码思特奇信息技术股份有限公司研究院,OTL 应用开发,OTL介绍OTL“流”的概念OTL的主要类OTL的使用OTL的编译OTL参考资料,OTL 介绍,什么是OTL:OTL 是 Oracle,Odbc and DB2-CLI Template Library 的缩写,是一个操控关系数据库的C+模板库,它目前几乎支持所有的当前各种主流数据库,如下表所示:,备注:Oracle和DB2也可以由OTL间接使用ODBC的方式来进行操纵,OTL的特点:,OTL 介绍,OTL“流”的概念,任何 SQL 语句,PL/SQL 块的调用或者是存储过程调用都可以用“流”的input/o

2、utput变量来表现。,使用SQL语句、PL/SQL 块 或者是存储过程调用,都可以看作是带输入输出流的黑盒。你可以不关心黑盒的内部工作(只需要依据黑盒的定义)。需要关注的是黑盒的输入输出线。,OTL“流”的概念,Example 1.SELECT语句有用于WHERE子句的标量input变量。SELECT 语句同时定义了输出列.潜在的输出列是矢量参数,因为SELECT语句可能返回多行。Example 2.INSERT语句往表中写数据,即它有输入参数,其输入参数是标量.UPDATE 语句亦是如此。Example 3.DELETE 从表中删除行,如需要输入删除条件,DELETE语句需有输入参数,其输

3、入参数是标量。Example 4.存储过程可能含有input和(或)output参数。通常存储过程的参数是标量。有一个特例:存储过程返回一个游标(cursor)(ORACLE)或者是结果集(MSSQL、Sybase),此时output参数是矢量。Example 5.任意一个PL/SQL块都可能有标量的输入或矢量的输出参数。,OTL“流”的概念,OTL“流”是缓存流 从概念上讲,OTL“流”有两个独立的缓存:输入和输出。输入缓存由所有的输入变量共同组成。同样的,输出缓存由所有的输出变量共同组成。OTL“流”的操作(1).OTL“流”的操作与C+流一样,通过操作符“”来进行操作,流的引用在操作符的

4、左边。s variable;s-从流到数据容器(变量)-从数据容器(变量)到流(2).OTL流需要用到OTL异常。即任何OTL流都潜在的会抛 otl_exception 类型的异常。为了截获异常并防止程序中断,请用 相应try&catch 块包装OTL代码段。,OTL 的主要类,主要类包括:otl_stream,otl_connect,otl_exception otl_stream类 otl_stream类 是OTL“流”的概念的具体表现形式,任何通过输入/输出参数使用SQL语句、PL/SQL 块 或者是存储过程调用,在C+的编程中都能通过 otl_stream 类来实现。其构造函数为:(1

5、)for Oracle 7/8/9/10:otl_stream(const int arr_size,/流的缓存大小 const char*sqlstm,/SQL语句或PL/SQL块或存储过程 otl_connect,OTL的主要类,(2)for ODBC/DB2-CLI:otl_stream(const int arr_size,/流的缓存大小 const char*sqlstm,/SQL语句或PL/SQL块或存储过程 otl_connect 该静态方法的主要功能是初始化OTL数据库环境,程序中第一次建立与数据库的连接之前,必须调用该方法一次,其后再建立与数据库的连接,就不需要调用该方法了。

6、如果程序是在多线程环境下访问数据库,参数threaded_mode需置为1。另外在多线程环境下访问数据库,不要多个线程操作同一个otl_connect对象,除非该ot_connect对象有互斥锁机制。,(2)void rlogon(const char*connect_str,const int auto_commit=0);该方法的主要功能是建立与数据库的连接。参数connect_str是数据库连接配置字符串,有两种表达形式 A.OTL4.0/OCIx”USER/PASSWORD”(本地数据库)”USER/PASSWORDTNS_ALIAS”(远程数据库)B.OTL4.0/ODBC和OTL4

7、.0/DB2_CLI”USER/PASSWORDDSN”DSN=value;UID=value;PWD=value”参数auto_commit设置数据库事务的提交模式,auto_commit设置为1,表示数 据库事务自动提交;auto_commit设置为0,表示数据库事务非自动提交,auto_commit 缺省为0。,OTL的主要类,(3)void logoff(void);该方法的主要功能是断开与数据库的连接。(4)void commit(void);该方法的主要功能是提交数据库事务。(5)void rollback(void);该方法的主要功能是回滚数据库事务。otl_exception类

8、 otl_exception类用于描述OTL操作数据时抛出的异常,有3个主要的成 员变量:(1)unsigned char msg1000;该成员变量用于保存存异常的具体错误信息。(2)char stm_text2048;该成员变量用于保存导致发生异常错误的SQL语句。(3)char var_info256;该成员变量用于保存导致发生异常错误的输入/输出变量。,OTL的主要类,OTL 的使用,OTL使用起来也很简单,使用不同的数据库连接,主要是根据需要在程序开始的宏定义来指定的。OTL是首先根据这个宏定义来初始化数据库连接环境。OTL中用来区分连接方式的宏定义主要有下面这些:OTL_ORA7,

9、OTL_ORA8,OTL_ODBC,OTL_DB2_CLI,OTL_ODBC_MYSQL.不同的宏对应的数据库API,具体说明如下:,OTL 的使用,SQL使用举例:/“OtlSqlExample.cpp”#include using namespace std;#include#define OTL_ORA9I/Compile OTL 4.0/OCI9i,/#define OTL_UNICODE/Enable Unicode OTL for OCI9i#include/include the OTL 4.0 header file otl_connect db;/connect object

10、 void insert();void insertConstant();void insertBatch();void insertNoAutoCommit();void select();void update();void updateNoAutoCommit();void del();int main()otl_connect:otl_initialize();/initialize OCI environment try db.rlogon(dbuser/dbpwd);/connect to Oracle,OTL 的使用,otl_cursor:direct_exec(db,drop

11、table person_tab,otl_exception:disabled/disable OTL exceptions);/drop tableotl_cursor:direct_exec(db,create table person_tab(age number,name varchar2(30);/create table insert();/insert one records into table insertConstant();/constand insert sql insertBatch();/insert batch records into table insertN

12、oAutoCommit();/insert no auto commit;select();/select records from table update();/update records in table updateNoAutoCommit();/update no auto commit del();/delete records from table,OTL 的使用,catch(otl_exception/INSERT automatically executes when all input variables are assigned.,OTL 的使用,void insert

13、Constant()/恒量insert SQL语句/create insert stream otl_stream o(1,/buffer size insert into person_tab values(30,”dengkf”),/INSERT statement db/connect object);/INSERT automatically executes when all input variables are assigned.,OTL 的使用,void insertBatch()/批量插入数据/create insert stream otl_stream o(10000,/

14、buffer size insert into person_tab values(:v_age,:v_name),db/connect object);char tmp32;for(int i=1;i=10000;i+)sprintf(tmp,“NAME%d”,i);oi;otmp;/INSERT automatically executes when all input variables are assigned.,OTL 的使用,void insertNoAutoCommit()/插入数据(事务手动提交)/create insert stream otl_stream o(10001,

15、/buffer size insert into person_tab values(:v_age,:v_name),db/connect object);o.set_flush(false);/turning off the streams autoflush flag o.set_commit(0);/turning off the streams autocommit flag char tmp32;for(int i=1;i=10000;i+)sprintf(tmp,“NAME%d”,i);oi;otmp;o.flush();/flushing the streams buffer m

16、it();/committing the changes to the database,OTL 的使用,void select()/检索数据/create select stream otl_stream I(50,/buffer size select*from person_tab where name=:v_name,/SELECT statement db/connect object);ir_age;ir_name;coutage=r_ageendl;coutname=r_nameendl;,OTL 的使用,/修改数据(事务自动提交)void update()/create upd

17、ate stream otl_stream s(1,/buffer size update person_tab set age=:v_age where name=:v_name,/UPDATE statement db/connect object);s31;/assgining:v_age=31 sdengkf;/assigning:v_name=8/UPDATE automatically executes when all input variables are assigned.,OTL 的使用,/修改数据(事务手动提交)void updateNoAutoCommit()/crea

18、te update stream otl_stream s(2,/buffer size update person_tab set age=:v_age where age,/UPDATE statement db/connect object);s.set_flush(false);s.set_commit(0);s31;/assgining:v_age=31 s2000;/assigning:v_age2=2000 s.flush();mit();,OTL 的使用,/删除数据void del()/create delete stream otl_stream l(1,/buffer si

19、ze“delete from person_tab where name=:v_name,/DELETE statement db/connect object);ldengkf;/assigning:v_name=8/DELETE automatically executes when all input variables are assigned.,OTL 的使用,SQL使用举例(常量SQL使用):常量SQL就是不带任何绑定变量的SQL,OTL通过一个静态方法来操作:long otl_cursor:direct_exec(otl_connect/drop table,OTL 的使用,lo

20、ng rpc=otl_cursor:direct_exec(db,/connect object“delete from persion_tab”);示例:Examples(ODBC,DB2-CLI)otl_cursor:direct_exec(db,/connect object create table person_tab(age numeric,name varchar(30);/create table otl_cursor:direct_exec(db,/connect object drop table persion_tab,/SQL statement otl_excepti

21、on:disabled/disable OTL exceptions,/in other words,ignore any/database error);/drop table long rpc=otl_cursor:direct_exec(db,/connect object“delete from persion_tab”);,OTL 的使用,PL/SQL块使用举例:/“OtlPlsqlExample.cpp”#include using namespace std;#include#define OTL_ORA9I/Compile OTL 4.0/OCI9i#include/inclu

22、de the OTL 4.0 header fileotl_connect db;/connect objectvoid plsql(void)/invoking PL/SQL block otl_stream o(50,/buffer size begin:A:=:A+1;:B:=:C;end;,/PL/SQL block db/connect object);,OTL 的使用,o.set_commit(0);/set stream auto-commit off since/the block does not have any transactions/to commit oab;cou

23、tA=a,B=bendl;,OTL 的使用,int main()otl_connect:otl_initialize();/initialize OCI environment try db.rlogon(“dbuser/dbpwd);/connect to Oracle plsql();/invoking PL/SQL block catch(otl_exception,OTL 的使用,输出:A=2,B=Test Stri ng1A=3,B=Test String2A=4,B=Test String3 常量PL/SQL块的使用与常量SQL的使用类似,在此不再赘述。,OTL 的使用,存储过程使

24、用举例:#include using namespace std;#include#define OTL_ORA9I/Compile OTL 4.0/OCI9i#include/include the OTL 4.0 header fileotl_connect db;/connect objectvoid stored_proc(void)otl_stream o(1,/buffer size should be equal to 1 in case of/stored procedure call begin my_proc(:a,:b,:c);end;,/stored procedure

25、 call db/connect object);,OTL 的使用,o.set_commit(0);/set stream auto-commit off since/the stream does not generate transaction oa2b2;coutA=a2endl;coutB=b2endl;,OTL 的使用,int main()otl_connect:otl_initialize();/initialize environment try db.rlogon(“dbuser/dbpwd);otl_cursor:direct_exec(db,CREATE OR REPLAC

26、E PROCEDURE my_proc(A IN OUT NUMBER,B OUT VARCHAR2,C IN VARCHAR2)IS BEGIN A:=A+1;B:=C;END;);/也可以直接用代码创建来测试用的过程,OTL 的使用,stored_proc();/invoking stored procedure catch(otl_exception常量存储过程的使用与常量SQL的使用类似,在此不再赘述。,OTL 的使用,OTL 的编译,在编译OTL的程序时,需要使用到相应的数据库API,这就要程序在编译时联接lib库文件,不同的数据库对应的lib文件所在位置各不相同,下面是分别在windows与Unix下的数据库API所需要的头文件及lib文件所在的位置列表:,OTL 的编译,OTL 实例,OTL参考资料,OTL最新版本为4.0,参见:下载地址:目前提供有377个使用范例可参考,下载地址:。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号