OTL 简介

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等等。
官网(就托管在sourceforge下):http://otl.sourceforge.net/
最重要的功能当然是支持几乎所有的数据库(也有其他api,比如SQLAPI++);
支持32/64位编译器;
跨平台;
OTL 4.0 supports all major and a few minor relational database types (Oracle, MS SQL Server, DB2, Informix, TimesTen, MAX/DB, etc.) natively via the corresponding database API. For the rest of database types (PostgreSQL, MySQL, Sybase, SQLite, MS ACCESS, Firebird, etc.), OTL has support via ODBC 3.x, or ODBC 2.5 (legacy applications).

(主流数据库)通过原生api访问,效率高,其他一些数据库如MySQL, Sybase, SQLite, MS ACCESS等只能通过ODBC访问,如果需要ADO或其他方式就不行了。
代码示例很多,官网下载即可。
他的所有代码都在一个头文件里,没有静态库或动态库。
作者是一个NB的美国人,MN, USA, Green Card holder, phone: (763) 536-3953, email: [email protected]
官网有他的个人简历。
使用:
1。static int otl_initialize(const int threaded_mode=0):
用于初始化OTL环境的静态函数,参数指定是用于多线程还是单线程。
0是单线程,非0是多线程。
if(threaded_mode) mode = OCI_THREADED;else mode = OCI_DEFAULT;
此函数第一步必须调用。

otl_connect::otl_initialize();

2.void rlogon(const char *connect_str,const int auto_commit = 0);
rlogon有两个参数,第一个是连接字符串,第二个是是否自动提交。
默认是不自动提交,需要手动调用commit()成员函数提交事务。
db.rlogon(“sa/123@orcl”); 登录到数据库;
连接字符串格式为:”用户名/密码@数据库服务名”。
登录后就可以操作数据库,进行增删改查了。
3. long direct_exec(…):
执行执行sql语句。如:
otl_cursor::direct_exec(db,
“create table test_tab(f1 number, f2 varchar2(30))”
); // create table
4.void set_commit(int auto_commit=0):
Set the stream auto-commit flag. When the output buffer is flushed, the current transaction is automatically committed, if the flag is set. By default, the flag is set. 代码示例基本都是自动提交的。
设置流被刷新时否自动提交事务。
两种条件下流会被刷新:a.缓冲区满 b.手动调用flush成员函数。
otl_stream的第一个参数为缓冲区大小。缓冲区大小定义了插入表的逻辑行以及与数据库一次往反交互(one round-trip to the database)过程中从表或视图中查询的逻辑行。

5.因为OTL的代码里面是直接调用数据库的API操作的,所以相比于原生的数据库API操作,OTL的性能上仅低10-15%左右,并且还能良好的支持多进程。
现在OTL已经开始同时支持32和64位平台。
它们的输入与输出总是具有VECTOR类型。
OTL流可能会抛出otl_exceptionr的异常,所以为了避免程序core down需要在处理OTL流的时候,用try…catch…块把相关代码包含起来。
OTL流的数据处理是自动的。当所有的输入变量全部定义后,它就自动的触发SQL去执行,并把输出填到输出缓冲区里面。此时输出就可以去缓冲区里面读取数据。如果缓冲区里面的数据满了后,还有数据未读出,则等等读取缓冲区数据后,再去取其他部分的数据。(如缓冲区只能容1000行数据,但某次SELECT取出了2000条数据,则先取出1000条后,如果缓冲区数据被程序取出后,OTL再自动的去取另外的1000条数据填进缓冲区里面。)

你可能感兴趣的:(OTL)