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(…)
|
构造函数。创建一个otl_long_string的实例。主要是分配内存,并设置内部变量。 为了保证能分配到正确的大小,otl_connect::set_max_long_size()必须声明的大于或等于otl_long_string的缓冲区大小。 |
||||||||||||
3 |
otl_long_string(…)
|
构造函数。该函数通过定义一个指针指向外部的一个缓冲区来替代默认的缓冲区。同时原来的缓冲区不再分配空间。 |
||||||||||||
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(…)
|
构造函数。创建一个otl_long_unicode_string的实例。主要是分配内存,并设置内部变量。 为了保证能分配到正确的大小,otl_connect::set_max_long_size()必须声明的大于或等于otl_long_string的缓冲区大小。 |
||||||||||||
2 |
otl_long_unicode_string(…)
|
构造函数。该函数通过定义一个指针指向外部的一个缓冲区来替代默认的缓冲区。同时原来的缓冲区不再分配空间。 |
||||||||||||
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类的更多相关文章
- OTL翻译(7) -- otl_exception类
otl_exception 这个类是OTL用来抛出异常的类.如果数据库API返回一个非0的错误值,则OTL会将会抛出一个otl_exception的异常.一个otl_exception异常有可能是一个 ...
- otl翻译(11) -- OTL的迭代器
OTL stream read iterator 这个类是一个像传统的JDBC中的getter()操作一样扩展了OTL流的模板类.它现在还不支持UNICODE字符集.它对otl_refcur_stre ...
- OTL翻译(4) -- otl_stream类
otl_stream Otl_stream是具体实现otl_stream_concept的类.任何的SQL语句.SQL语句块和存储过程都能通过otl_stream进行处理. 传统的数据库API处理SQ ...
- OTL翻译(3) -- OTL的主要类
相比于传统的C++类库而言,OTL更像是一个代码容器,里面复杂,但对外的接口简单.OTL在处理程序方面受到了STL的影响. OTL有一个模板框架,它实现了otl_stream的概念.该框架由模板类和内 ...
- OTL翻译(6) -- otl_connect类
otl_connect 这个类封装了连接的功能,如连接.断开连接.提交.回滚等.otl_connect也就是一个用来创建连接对象并进行管理的类. 序号 方法.变量 说明 1 int connected ...
- OTL翻译(5) -- otl_stream流相关绑定变量
声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并 ...
- OTL翻译(10) -- OTL的流缓冲池
OTL的流缓冲池 一般来讲,流一般作为一个局部的变量被使用,当使用完毕后就立刻关闭,如果需要再次使用就需要再次的声明变量,如此循环.OTL流的缓冲池(内存池)是一个解决以往的流性能低下的一个机制.当流 ...
- OTL翻译(9) --常量的SQL语句
常量的SQL语句 一个没有绑定变量的SQL语句.SQL语句块或是存储过程就被称为常量的SQL语句.OTL通过一个静态的函数来执行这样的SQL语句. 例如: // static otl_cursor:: ...
- OTL翻译(1) -- 说明
说明 该文档说明的是4.0版本的ORACLE/ODBC和DB2-CLI模板库(OTL).OTL4.0(后面简称OTL)模板库是基于C++的模板的. OTL4.0是组合了C++的模板框架和OTL适配器. ...
随机推荐
- 《Android源码设计模式》--Builder模式
No1: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 No2: 在Android源码中,最常用到的Builder模式就是AlertDialog.Builder No3: ...
- .NET Core2.1下采用EFCore比较原生IOC、AspectCore、AutoFac之间的性能
一.前言 ASP.NET Core本身已经集成了一个轻量级的IOC容器,开发者只需要定义好接口后,在Startup.cs的ConfigureServices方法里使用对应生命周期的绑定方法即可,常见方 ...
- WebApi-JSON序列化循环引用
Overview 最近被序列化,循环引用的问题,让我浑身酸爽.遇到这种异常是在搭建WebApi的时候,当我返回Linq实例类集合的时候出现的. 下定决心要解决这个问题.循环引用引起的原因是: 比如说: ...
- [leetcode DP]120. Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- 【WIN10】Toast 通知
DEMO下載:http://yunpan.cn/cFSLZQf5ePeTV 访问密码 1fce 1.顯示通知 使用xml確定通知內容. string xml = "<toast la ...
- luoguP3507 [POI2010]GRA 性质 + 动态规划
题目大意: 给定\(n\)个正整数,\(a, b\)两个人轮流取,\(a\)先手 每次可以取任意多的数,直到取完,每次的得分为取的数中的最小值 \(a, b\)都会使自己的得分减去对手的得分更大,询问 ...
- POJ 3155 Hard Life 最大密度子图 最大权闭合图 网络流 二分
http://poj.org/problem?id=3155 最大密度子图和最大权闭合图性质很相近(大概可以这么说吧),一个是取最多的边一个是取最多有正贡献的点,而且都是有选一种必须选另一种的限制,一 ...
- [java][jboss]改变jboss部署目录(虚拟目录)
原文: [java][jboss]改变jboss部署目录(虚拟目录) 在开发过程中,有时候我们希望将程序放在我们的源代码目录中,比如d:\code下,而不是放在jboss的deploy下,怎么办? 我 ...
- hdu 3061 最大权闭合子图
属于模板题吧... #include <cstdio> #include <cstring> #include <vector> #define min(a,b) ...
- python 爬虫学习<将某一页的所有图片下载下来>
在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...