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&)

拷贝构造函数

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

  1. OTL翻译(7) -- otl_exception类

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

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

    OTL stream read iterator 这个类是一个像传统的JDBC中的getter()操作一样扩展了OTL流的模板类.它现在还不支持UNICODE字符集.它对otl_refcur_stre ...

  3. OTL翻译(4) -- otl_stream类

    otl_stream Otl_stream是具体实现otl_stream_concept的类.任何的SQL语句.SQL语句块和存储过程都能通过otl_stream进行处理. 传统的数据库API处理SQ ...

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

    相比于传统的C++类库而言,OTL更像是一个代码容器,里面复杂,但对外的接口简单.OTL在处理程序方面受到了STL的影响. OTL有一个模板框架,它实现了otl_stream的概念.该框架由模板类和内 ...

  5. OTL翻译(6) -- otl_connect类

    otl_connect 这个类封装了连接的功能,如连接.断开连接.提交.回滚等.otl_connect也就是一个用来创建连接对象并进行管理的类. 序号 方法.变量 说明 1 int connected ...

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

    声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并 ...

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

    OTL的流缓冲池 一般来讲,流一般作为一个局部的变量被使用,当使用完毕后就立刻关闭,如果需要再次使用就需要再次的声明变量,如此循环.OTL流的缓冲池(内存池)是一个解决以往的流性能低下的一个机制.当流 ...

  8. OTL翻译(9) --常量的SQL语句

    常量的SQL语句 一个没有绑定变量的SQL语句.SQL语句块或是存储过程就被称为常量的SQL语句.OTL通过一个静态的函数来执行这样的SQL语句. 例如: // static otl_cursor:: ...

  9. OTL翻译(1) -- 说明

    说明 该文档说明的是4.0版本的ORACLE/ODBC和DB2-CLI模板库(OTL).OTL4.0(后面简称OTL)模板库是基于C++的模板的. OTL4.0是组合了C++的模板框架和OTL适配器. ...

随机推荐

  1. mysql关于数据库表的水平拆分和垂直拆分

    最初知道水平垂直分表的时候是刚参加工作不久的时候,知道了这个概念,但是公司用户量和数据量始终没上来,所以也没用到过,知道有一天到了一家新公司后,这些才被应用到实际开发中,这里我就大概说说关于水平和垂直 ...

  2. 使用 Python 可以做什么?

    翻译自 <Python学习手册(第5版)> Systems Programming Python 对操作系统服务的内置接口使其非常适合编写可移植.可维护的系统管理工具和实用程序 utili ...

  3. JAVAEE——SSH项目实战03:新增客户、数据字典、文件上传和修改客户

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7145599.html 一.新增客户 1.数据字典  用于枚举项目中有限个数的字典项 (1 ...

  4. 【java】Hibernate saveOrUpdate失效以及补救方案

    有个需求是如果unique key不存在则插入,存在则更新. 简单的方式先select一下再insert 或者update,但是嫌太麻烦而且慢,所以采用Hibernate中session.saveOr ...

  5. 机器学习之路:python 网格搜索 并行搜索 GridSearchCV 模型检验方法

    git:https://github.com/linyi0604/MachineLearning 如何确定一个模型应该使用哪种参数? k折交叉验证: 将样本分成k份 每次取其中一份做测试数据 其他做训 ...

  6. kotlin 视频

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha

  7. CF1060C Maximum Subrectangle【乘法分配律】【最大子矩阵】

    CF1060C Maximum Subrectangle 题意翻译 现在给出一个长度为N的a数列,一个长度为M的b数列. 现在需要构造出一个矩阵c,其中ci,j​=ai​×bj​.再给出一个x,请在矩 ...

  8. [转]Android使用Application总结

        目录(?)[+]   Application 配置全局Context 第一步.写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里 ...

  9. Codeforces Round #FF (Div. 1) A. DZY Loves Sequences 动态规划

    A. DZY Loves Sequences 题目连接: http://www.codeforces.com/contest/446/problem/A Description DZY has a s ...

  10. mysql慢查询配置

    1.慢查询有什么用? 能记录下所有执行超过long_query_time时间的SQL语句, 帮你找到执行慢的SQL, 方便我们对这些SQL进行优化. 2. 如何开启慢查询? 首先我们先查看MYSQL服 ...