OTL翻译(7) -- otl_exception类

otl_exception

这个类是OTL用来抛出异常的类。如果数据库API返回一个非0的错误值,则OTL会将会抛出一个otl_exception的异常。一个otl_exception异常有可能是一个数据库错误或是一个OTL定义的错误。


序号


函数、成员变量


说明


1


char stm_text[2048 or OTL_EXCEPTION_STM_TEXT_SIZE]


OTL异常里面SQL语句的前2047个字符。当设置了stream label(在otl_stream或open()函数里面的sqlstm_label设置)后,它就被SQL的数据成员替代了SQL语句。


2


char var_info[256]


如果抛出了“Incompatible data types in stream operation”异常,则该变量被用来填充绑定变量和字段信息。如:bind variable name/select output column number <datatype>


3


#if defined(OTL_UNICODE_EXCEPTION_AND_RLOGON)

SQLWCHAR msg[1000];

#else

unsigned char msg[1000];

#endif


数据库错误信息或是OTL错误信息。


4


int code


数据库错误的编码或是OTL错误编码


5


#if defined(OTL_UNICODE_EXCEPTION_AND_RLOGON)

SQLWCHAR sqlstate[1000];

#else

unsigned char sqlstate[1000];

#endif


仅适用于ODBC或DB2 CLI。对于OCI它始终为空。

用来存放SQL的状态信息,详细请见ODBC或DB2 CLI手册。


6


#if defined(OTL_EXTENED_EXCEPTION)

#if defined(OTL_UNICODE_EXCEPTION_AND_RLOGON)

int arr_len;

SQLWCHAR *msg_arr[];

SQLWCHAR *sqlstate_arr[];

int code_arr[]

#else

int arr_len;

char * msg_arr[];

char * sqlstate_arr[];

int code_arr[];

#endif

#endif


扩展字段信息。通过SQLGetDiagRec()函数,获取所有的ODBC/DB2 CLI动态记录信息。

OTL的异常往往只取第一条信息,但对于ODBC、DB2 CLI在某些情况下,它会带有多条动态的信息,此时该变量里面包含有所有的信息。arr_len是信息数量。

msg_arr里面是消息;sqlstate_arr里面是sqlstate;code_arr里面是错误码。


7


#if defined(OTL_EXCEPTION_ENABLE_ERROR_OFFSET)

int error_offset

#endif


仅适用于OCI。

SQL语句解析错误码。


8


enum{disabled = 0,enabled = 1};


定义两个常量用于静态的SQL语句。

时间: 2024-10-04 10:41:43

OTL翻译(7) -- otl_exception类的相关文章

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翻译(6) -- otl_connect类

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

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 O

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翻译(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 ·     

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翻译(9) --常量的SQL语句

常量的SQL语句 一个没有绑定变量的SQL语句.SQL语句块或是存储过程就被称为常量的SQL语句.OTL通过一个静态的函数来执行这样的SQL语句. 例如: // static otl_cursor::direct_exec() otl_cursor::direct_exec (db, // connect object "create table test_tab(f1 int, f2 varchar(30))" ); // create table otl_cursor::direc

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

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

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

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