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

·             MS SQL Server: TEXT, IMAGE, VARBINARY, BINARY, VARCHAR(MAX), VARBINARY(MAX)

·             DB2: CLOB, BLOB

·             Sybase: TEXT, IMAGE, VARBINARY, BINARY

·             PostgreSQL: TEXT, BYTEA,

·             SAP/MAX DB: CHAR() BYTE, VARCHAR() BYTE, LONG VARCHAR, LONG VARCHAR BYTE

·             MySQL: LONGTEXT, LONGBLOB, VARBINARY, BINARY

otl_long_unicode_string是用来处理UNICODE字符的大对象类型,它可以处理下面这些类型:

·             Oracle 8i, 9i, 10g: LONG,  CLOB; the database default character set may be set to ASCII, or UTF-8, etc

·             Oracle 8i, 9i, 10g: NCLOB; the database national character set may be set to whatever is allowed for a concrete version of the database (8i and 9i/10g differ / are not the same in that regard, as far as supporting different versions of Unicode, and what sets are allowed for national character data types)

·             MS SQL NTEXT

·             DB2 CLOB / DBCLOB when the database supports Unicode (UTF-8, UCS-2, etc.)

如果定义了OTL_UNICODE宏,那么对于ORACLE的LONG RAWS/BLOB,MS SQL IMAGES,DB2 BLOBS等仍要通过otl_long_string来处理。因为他们仍然是大对象。

OTL还定义了下列类型用于处理LOBS类型。

  • varchar_long for Oracle 7/8/8i/9i/10g LONG, MS SQL Server/Sybase TEXT/NTEXT, DB2 CLOB/DBCLOB
  • raw_long for Oracle 7/8/8i/9i/10g RAW, LONG RAW, MS SQL Server/Sybase IMAGE, DB2 BLOB
  • clob for Oracle 8/8i/9i/10g CLOB, NCLOB (if #define OTL_UNICODE is enabled).
  • blobfor Oracle 8/8i/9i/10g BLOB

大对象和NULL值

大对象和NULL值的操作,与其他类型的字段有很大的区别。对于大对象与NULL的处理方式分为下面两种情况:

一、Oracle 7/8/8i/9i/10g‘s LONG, Oracle 7/8‘s LONG RAW, MS SQL Server/Sybase‘s TEXT, MS SQL Server/Sybase‘s IMAGE, DB2‘s CLOB/BLOB:

相对于一般的数据库类型,以上这些大对象可以通过两种方式设置为空。一是往流里面写入一个otl_null()值;二是通过调用otl_long_string::set_len(0)把大对象值设置为0.

对于输出,也有两种方式用来检测是否为空。一是通过is_null()进行判断;二是通过otl_long_string::len()获取结果后与0进行比较。

二、Oracle 8/8i/9i/10g‘s CLOB, Oracle 8/8i/9i/10g‘s BLOB:

对于以上的数据库类型,对于大对象空值的判断,在输入参数上,与上面的是同样的具有两川方式处理。但是对于输出参数的处理上,则只能通过otl_long_string::len()返回值与0进行比较。所以推荐使用otl_long_string::len()操作来判断空值。

下面分别介绍一个otl_long_string类和otl_long_unicode_string类。

otl_long_string


序号


函数、成员变量


说明


1


unsigned char * v;


指向LOB值的指针。


2


otl_long_string(…)


序号


参数


说明


1


const int buffer_size = 32760


定义LOB缓冲区大小


2


const int input_length = 0


定义实际的输入字符串长度,如果这个使用了,那么set_len()就可以不必调用


构造函数。创建一个otl_long_string的实例。主要是分配内存,并设置内部变量。

为了保证能分配到正确的大小,otl_connect::set_max_long_size()必须声明的大于或等于otl_long_string的缓冲区大小。


3


otl_long_string(…)


序号


参数


说明


1


const void * external_buffer


指向外部缓冲区的指针


2


const int buffer_size = 32760


定义LOB缓冲区大小


3


const int input_length = 0


定义实际的输入字符串长度,如果这个使用了,那么set_len()就可以不必调用


构造函数。该函数通过定义一个指针指向外部的一个缓冲区来替代默认的缓冲区。同时原来的缓冲区不再分配空间。


4


void set_len(const int len = 0)


动态的设置缓冲区大小。它必须在写LOB值之前调用。


5


void set_last_piece(

const bool last_piece = false)


仅对OCI8i/9i/10g/11g有效。对于ODBC和DB2 CLI不起作用。

当otl_long_string与otl_lob_stream同时使用的时候,该函数表明otl_string_string是写入otl_stream里面的最后一个序列。


6


int len()


返回缓冲区的大小。


7


unsigned char & operator[](int ndx)


读取LOB里面非法的字节。


8


otl_long_string & operator =

(const otl_long_string&)


赋值构造函数


9


otl_long_string(

const otl_long_string&)


拷贝构造函数

otl_long_unicode_string


序号


函数、成员变量


说明


1


otl_long_unicode_string(…)


序号


参数


说明


1


const int buffer_size = 32760


定义LOB缓冲区大小


2


const int input_length = 0


定义实际的输入字符串长度,如果这个使用了,那么set_len()就可以不必调用


构造函数。创建一个otl_long_unicode_string的实例。主要是分配内存,并设置内部变量。

为了保证能分配到正确的大小,otl_connect::set_max_long_size()必须声明的大于或等于otl_long_string的缓冲区大小。


2


otl_long_unicode_string(…)


序号


参数


说明


1


const void * external_buffer


指向外部缓冲区的指针


2


const int buffer_size = 32760


定义LOB缓冲区大小


3


const int input_length = 0


定义实际的输入字符串长度,如果这个使用了,那么set_len()就可以不必调用


构造函数。该函数通过定义一个指针指向外部的一个缓冲区来替代默认的缓冲区。同时原来的缓冲区不再分配空间。


3


void set_len(const int len = 0)


动态的设置缓冲区大小。它必须在写LOB值之前调用。


4


int len(void)


返回缓冲区的大小。


5


unsigned short & operator[](int ndx)


读取LOB里面非法的字节。


6


otl_long_unicode_string & operator =

(const otl_long_unicode_string)


赋值构造函数


7


otl_long_unicode_string(

const otl_long_unicode_string&)


拷贝构造函数

时间: 2024-08-04 05:11:25

OTL翻译(8) -- otl_long_string/otl_long_unicode_string类的相关文章

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()函数里面的sq

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

[翻译]-Linux上C++类的动态加载

摘要:本文是翻译文章,主要介绍了运行时重载C++类的技术,包括了Linux上的动态加载接口.C++类的动态加载技术点及实现.自动加载技术等.最后给出了两个应用案例及相关的源代码.   关键字:动态加载,C++类,Linux 原文链接:http://porky.linuxjournal.com:8080/LJ/073/3687.html   推荐: (原文)http://www.tldp.org/HOWTO/text/C++-dlopen (翻译)http://hi.baidu.com/clive

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

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

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

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

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