OTL 编程

1 篇文章 0 订阅
0 篇文章 0 订阅

OTL 编程简介

1.      OTL简介

OTL是Oracle 和 ODBC 的模板库,它屏蔽数据库操作的底层,提供数据库连接功能,以标准 C++ 流的方式完成嵌入式 SQL 语句、存储过程的执行和光标操作。 

OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例如Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。OTL中直接操作Oracle主要是通过Oracle提供的OCI接口进行,进行操作DB2数据库则是通过CLI接口来进行,至于MS的数据库和其它一些数据库,则OTL只提供了ODBC来操作的方式。当然Oracle和DB2也可以由OTL间接使用ODBC的方式来进行操纵。  

在MS Windows and Unix 平台下,OTL目前支持的数据库版本主要有:Oracle 7 (直接使用 OCI7), Oracle 8 (直接使用 OCI8), Oracle 8i (直接使用OCI8i), Oracle 9i (直接使用OCI9i), Oracle 10g (直接使用OCI10g), DB2 (直接使用DB2 CLI), ODBC 3.x ,ODBC 2.5。OTL最新版本为4.0,参见http://otl.sourceforge.net/,下载地址http://otl.sourceforge.net/otlv4_h.zip

 优点:

a)        跨平台 

b)        运行效率高,与C语言直接调用API相当 

c)        开发效率高,起码比ADO.net使用起来更简单,更简洁 

d)        部署容易,不需要ADO组件,不需要.net framework 等。

2.      otl_connect 类 

提供数据库连接、事务操作的功能。 (SHBOSS开发中,由 CDBConnGuard 类屏蔽之并进行连接等管理。) 

主要成员函数: 

²  int connected; // 是否已经连接到数据库 

²  static int otl_initialize(const int threaded_mode=0); // 初始化 OTL 环境,必须在调用 OTL API 之前被调用;threaded_mode=1表示运行在多线程环境 

²  void set_max_long_size(const int amax_size); // 设置缓冲区大小(仅对大数据字段适用) 

²  otl_connect(const char* connect_str,const intauto_commit=0);   // connect_str的格式:USER/PASSWORD@TNS_ALIAS,如果是本地连接则不需要TNS_ALIAS

²  void rlogon(const char* connect_str,const int auto_commit=0); 

²  void logoff(); 

²  void commit(); 

²  void rollback(); 

²  注释:使用 server、session来登录比用 rlogon 效率更高

²  建议使用显式的 commit 和 rollback,不使用 autocommit

3.      otl_stream 类

以宿主调用和流的方式完成 SQL 语句的执行。 

工作原理:先分析程序员指定的 SQL 语句,之后以流的方式把数据和 otl_stream 内部的缓冲区作交换,通过 flush() 将数据刷新到数据库中。 

otl_nocommit_stream

主要成员函数:


OTL 的数据类型


4.      错误处理(otl_exception)

class otl_exception { 

public:  

char stm_text[2048]; // 导致异常的SQL 语句  

char var_info[256]; // 导致数据类型不兼容的邦定变量的名字  

unsigned char msg[1000]; // 数据库或者OTL的错误信息  

int code; // 错误代码

};

5.      其它

5.1        使用邦定变量 

示例: 

INSERT INTO my_table VALUES( :employee_id<int>, 

:supervisor_name<char[32]>)

5.2        char 字段 

在执行INSERT语句的时候,如果数据库中char字段的大小是n,则这个INSERT语句的邦定变量的大小要为n+1;否则当邦定变量的大小为n时,执行INSERT会出错。 

例如: 

INSERT INTO my_table VALUES( :1<int>,:2<char[33]>, :3<double>,:4<char[129]> ) 

这个例子中,my_table的第二和第四个字段的大小分别为32和128。

5.3        number 字段 

对数据库中定义的数字字段,可以根据字段的大小使用16位、32 位的整数和double类型;当然,如果对所有OCI的数字字段使用double,也不会出错。

5.4        otl_datetime 

 class otl_datetime{  

public:

int year;

int months;

int day;

int hour;

int minute;

int second;

};  

5.5        otl_null 

otl_null表示一个空值,当要INSERT一个空值到数据库中时,必须使用它。

class otl_null{

public:

otl_null(){}

~otl_null(){}

}; 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值