otl翻译(11) -- OTL的迭代器

OTL stream read iterator

这个类是一个像传统的JDBC中的getter()操作一样扩展了OTL流的模板类。它现在还不支持UNICODE字符集。它对otl_refcur_stream和otl_stream的使用基本相同(在ORACLE8版本里面)。

模板的定义如下:

template<typename OTLStream,

typename OTLException

#if !defined(OTL_ORA7)

// when any flavor of OTL but OTL_ORA7 is defined:

// OTL_ORA8, OTL_ORA8I, OTL_ORA9I, OTL_ORA10G,

// OTL_ORA10G_R2, OTL_ODBC, OTL_DB2_CLI

,typename OTLLobStream

#endif

>

class otl_stream_read_iterator{

//...

}

下面为相关的函数与说明:


序号


函数


说明


1


otl_stream_read_iterator();


默认构造函数


2


~otl_stream_read_iterator();


析构函数


3


otl_stream_read_iterator(OTLStream& s);


构造函数。把它附着到一个流上面


4


void attach(OTLStream& s);


附加到一个流上面


5


void reattach();


重新附加到一个相同的流上面。

它是在对同一个游标流关闭后再打开的情况下使用。


6


void detach();


从流中分离出来


7


bool next_row();


读取下一条记录。如果有下一条记录,则返回真。如果没有下一条记录直接到达结尾,则返回假。


8


const otl_var_desc* describe(int& var_desc_len);


解析输出字段的结构。参数为参数个数。相同的功能与otl_stream::describe_out_vars()。


9


void get(const int pos, char& c);


通过位置读取一个字符


10


void get(const int pos, unsigned char& c);


通过位置读取一个无符号字符


11


void get(const int pos, char* s);


通过位置读取一个字符串


12


void get(const int pos, unsigned char* s);


通过位置读取一个无符号字符串


13


void get(const int pos, int& n);


通过位置读取一个32位整型


14


void get(const int pos, unsigned int& n);


通过位置读取一个32位无符号整型


15


void get(const int pos, short int& n);


通过位置读取一个短整型


16


void get(const int pos, long int& n);


通过位置读取一个长整型


17


void get(const int pos, float& n);


通过位置读取一个4字节长度的浮点型


18


void get(const int pos, double& n);


通过位置读取一个8字节长度的浮点型


19


void get(const int pos, OTL_BIGINT& n);


读取一个有符号的64位整型


20


void get(const int pos, OTL_STRING_CONTAINER& s);


当定义了OTL_STL宏的时候读取string;

当定义了OTL_STLPORT宏的时候读取string;

当定义了OTL_ACE宏的时候读取ACE_TString;

当定义了OTL_USER_DEFINED_STRING_CLASS_ON宏的时候,读取USER_DEFINED_STRING_CLASS;

它还可以用来读取VARCHAR/CHAR/LONG/TEXT等大对象。


21


void get(const int pos, otl_long_string& s);


读取otl_long_string类型


22


void get(const int pos, otl_long_string*& s);


通过引用的指针读取otl_long_string类型。这个在读取大对象的时候性能比上面的更好。


23


void get(const int pos, otl_lob_stream*& s);


仅在OCI8/9/10/11时候适用。

从一个大对象流中读取大对象。需要在LOG_STREAM_MODE模式下。


24


void get(const int pos, otl_datetime& s);


通过位置读取一个日期时间类型


25


bool is_null(const int pos);


如果指定位置为空,则返回真。否则返回假。


26


void get(const char* var_name, char& c);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量名读取一个字符


27


void get(const char* var_name, unsigned char& c);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个无符号字符


28


void get(const char* var_name, char* s);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定的变量读取一个字符串


29


void get(const char* var_name, unsigned char* s);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个无符号字符串


30


void get(const char* var_name, int& n);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个整型


31


void get(const char* var_name, unsigned int& n);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个无符号整型


32


void get(const char* var_name, short int& n);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个短整型


33


void get(const char* var_name, long int& n);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个长整型


34


void get(const char* var_name, float& n);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个4字节长度的浮点型


35


void get(const char* var_name, double& n);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个8字节长度的浮点型


36


void get(const char* var_name, OTL_BIGINT& n);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个64位长整型


37


void get(const char* var_name, OTL_STRING_CONTAINER& s);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

在定义了OTL_STL的情况下读取一个std::string类型。可以用来读取VARCHAR/CHAR/TEXT等类型。


38


void get(const char* var_name, otl_long_string& s);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

读取一个otl_long_string类型


39


void get(const char* var_name, otl_long_string*& s);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

读取一个otl_long_string类型引用指针。在读取大对象的时候性能比较好。


40


void get(const char* var_name, otl_lob_stream*& s);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

读取一个otl_lob_stream对象的引用指针


41


void get(const char* var_name, otl_datetime& s);


需要定义OTL_STL或OTL_STLPORT或OTL_ACE宏。

通过指定变量读取一个日期时间类型


42


bool is_null(const char* var_name);


如果指定的变量为空,返回真,否则返回假。

时间: 2024-10-07 19:19:44

otl翻译(11) -- OTL的迭代器的相关文章

OTL翻译(2) -- OTL流的概念

OTL流的概念 任何的SQL语句.SQL语句块或存储过程,都是通过输入与输出变量进行处理参数与结果的. 如: 例1:一个SELECT语句把标量的输入变量作为WHERE子句部分的条件:同时SELECT部分则定义了输出的字段,并且在结果集为多行的情况下还是一个VECTOR结构. 例2:一个INSERT语句把数据写入数据库中,同样需要输入数据.UPDATE也是同样的道理. 例3:一个DELETE语句从表中删除数据,删除的条件同样需要通过参数输入. 例4:一个存储过程可能同时具有输入与输出参数.通过存储

OTL翻译(10) -- OTL的流缓冲池

OTL的流缓冲池 一般来讲,流一般作为一个局部的变量被使用,当使用完毕后就立刻关闭,如果需要再次使用就需要再次的声明变量,如此循环.OTL流的缓冲池(内存池)是一个解决以往的流性能低下的一个机制.当流被关闭后,实际上流的相关变量被保存在一个流缓冲池里面,以便再利用. 每一个流在解析SQL或与数据库层打交道的时候都存在着巨大的资源开销.OTL通过流缓冲池机制来解决这个不必要的开销以提高性能. 当一个流“关闭”后,实际上,它被保存在一个流缓冲池里面.如果后面再需要一个类似的流,那么就只需要把流缓冲池

OTL翻译(3) -- OTL的主要类

相比于传统的C++类库而言,OTL更像是一个代码容器,里面复杂,但对外的接口简单.OTL在处理程序方面受到了STL的影响. OTL有一个模板框架,它实现了otl_stream的概念.该框架由模板类和内联函数组成.模板类把普通的类型作为参数,这些参数的类型提供了对数据库API的详细操作. 对于已有的数据库API,OTL提供如下的数据库API支持: ·       Oracle Call Interface for Oracle 7/8/8i /9i/10g/10gR2/11g (OCI7/8/8i

OTL翻译(4) -- otl_stream类

otl_stream Otl_stream是具体实现otl_stream_concept的类.任何的SQL语句.SQL语句块和存储过程都能通过otl_stream进行处理. 传统的数据库API处理SQL语句的时候,需要绑定变量与占位符,因此,程序员需要定义变量.解析SQL语句.调用绑定占位符的函数.把变量绑定到占位符上.执行SQL.读取输出的变量等等.如此循环.以上所有的这些操作在OTL里面的otl_stream类里面都是自动处理的,otl_stream类提供了与数据库交互自动化最大性能.该性能

OTL中文乱码 OTL UTF8

在用unixODBC连接MySQL的时候字符编码是由odbc支持的,不需要C++编译OTL的时候加上什么编译条件. 如果你的数据库使用的编码是UTF-8,你要从这个数据库读数据,而且还要将结果放到这个数据库,你可以在配置文件odbc.ini里面加以要求 [mysql_from] Description = Data Source to mysql_from for read config for scp_platfom Driver =MYSQL TraceFile = sql.log TDS_

OTL翻译(6) -- otl_connect类

otl_connect 这个类封装了连接的功能,如连接.断开连接.提交.回滚等.otl_connect也就是一个用来创建连接对象并进行管理的类. 序号 方法.变量 说明 1 int connected 数据库是否已经连接的标志. 该标志只是在数据库连接成功后才标志为1(成功).如果一个已经连接成功数据库的连接在长时间没有数据库操作的情况下,由数据库主动断开了连接,该标志不会改为.还是为1(真),所以为了保证该标志一直有效,需要为该标志建一个“心跳”,以判断数据库是否仍旧连接为真.如发送一个简单的

OTL翻译(1) -- 说明

说明 该文档说明的是4.0版本的ORACLE/ODBC和DB2-CLI模板库(OTL).OTL4.0(后面简称OTL)模板库是基于C++的模板的. OTL4.0是组合了C++的模板框架和OTL适配器.框架是一个简单的OTL_stream的概念,OTL适配器则是一个基于数据库API的经量级的类库,并且作为参数传给OTL的框架参数. OTL4.0仅通过otl_stream,otl_connect,otl_exception,olt_long_string和几个简单的ORACLE数据库的从模板框架和O

OTL翻译(5) -- otl_stream流相关绑定变量

声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并且在内部进行变量的内存分配操作. 在ORACLE里面占位符的表示方法与其他数据库不同,在ORACLE里面的占位符是通过带有冒号的前缀来表示的,如::f1/:supervisor_name/:employee_id等,并且同一个占位符可能在同一个SQL语句里面使用多次. 在ODBC或DB2 CLI里面

OTL翻译(8) -- otl_long_string/otl_long_unicode_string类

otl_long_string/olt_long_unicode_string 这两个类主要用来处理大对象数据.从OTL4.0版本开始,otl_long_string还可以处理任何类型的RAW/BIANRY类型.下面列出了常见数据库的一些大对象类型: ·             Oracle 7: LONG, RAW, LONG RAW ·             Oracle 8, 8i, 9i, 10g, 11g: LONG, RAW, LONG RAW; CLOB, BLOB ·