返回首页

gbase数据、南大通用产品文档:GBase8a:9092 topic test

更新日期:2024年09月11日

hello world
步骤4
开启一个终端,打开消费者。
[root@V173 kafka]# $kafka_home/bin/kafka-console-consumer.sh --zookeeper

在数据库服务器中,在有下列数据类型之一的列中,可直接存储智能大对象:

CLOB 数据类型保存文本数据。

BLOB 数据类型可在不可分的字节流中存储任何类别的二进制数据。
CLOB 或 BLOB 列为智能大对象保存 LO 句柄。因此,当选择 CLOB 或 BLOB 列时,
不取得智能大对象的实际数据,而是标识此数据的 LO 句柄。智能大对象的列有理论上的
4 TB 限制,并由磁盘容量确定实际的限制。
可使用下列方式之一来在列中存储智能大对象:

对于智能大对象的直接访问,创建 CLOB 或 BLOB 数据类型的列。

要在原子数据类型内隐藏智能大对象,创建保存智能大对象的 opaque 类型。
在客户机应用程序中,IfxBblob 和 IfxCblob 类是在 JDBC 3.0 规范中描述的处理智能大对
象数据方式与 GBase 8s 扩展之间的桥梁。IfxBblob 类实现 java.sql.Blob 接口,IfxCblob 类
实现 java.sql.Clob 接口。 GBase 8s 扩展需要一个 IfxLocator 对象,来标识数据库服务器中
的智能大对象。
当查询包含 BLOB 或 CLOB 类型列的表时,返回一个 Blob 或 Clob 类型的对象,这依
赖于列类型。然后,可使用 Blob 或 Clob 类型对象的 JDBC 3.0 支持函数,来访问智能
大对象。
构造函数从 IfxLocator 对象 loPtr 创建一个 IfxBblob 或 IfxCblob 对象:
public IfxBblob(IfxLocator loPtr)
public IfxCblob(IfxLocator loPtr)

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 144 -

下列定位器方法从 IfxBblob 或 IfxCblob 对象返回一个 IfxLocator 对象。然后,您可使
用 IfxSmartBlob.IfxLoOpen()、IfxLoRead() 和IfxLoWrite() 方法,来打开、读和写智能大对
象:
public IfxLocator getLocator() throws SQLException
打开智能大对象
IfxSmartBlob 类中的下列方法打开数据库服务器中现有的智能大对象:
public int IfxLoOpen(IfxLocator loPtr, int flag) throws
SQLException
public int IfxLoOpen(IfxBblob blob, int flag) throws SQLException
public int IfxLoOpen(IfxCblob clob, int flag) throws SQLException
第一个版本打开由定位器指针 loPtr 引用的智能大对象。
第二个和第三个版本分别打开由指
定的 IfxBblob 和 IfxCblob 对象引用的智能大对象。flag参数是来自 创建 IfxSmartBlob 对
象 中表的一个值。
智能大对象内的位置
IfxSmartBlob 类中的 IfxLoTell() 方法返回当前的查找位置,其为智能大对象下一读或写操
作的偏移量。IfxSmartBlob 类中的 IfxLoSeek() 方法设置已打开的大对象内的读或写位置。
public long IfxLoTell(int lofd)
public long IfxLoSeek(int lofd, long offset, int whence) throws
SQLException
绝对位置依赖于第二个参数 offset 的值和第三个参数 whence 的值。
lofd 参数是由 IfxLoCreate() 或 IfxLoOpen() 方法返回的定位符文件描述符。offset 参数是从
开始的查找位置的偏移量。
whence 参数标识开始查找位置。请使用下表中的 whence 值来定义智能大对象内的位置,
来启动查找操作。
开始的查找位置
whence 值
智能大对象的开头
IfxSmartBlob.LO_SEEK_SET
智能大对象中的当前位置 IfxSmartBlob.LO_SEEK_CUR
智能大对象的结束
IfxSmartBlob.LO_SEEK_END
返回值是表示智能大对象内绝对位置的长整数。
下列示例展示如何使用 LO_SEEK_SET whence 值:
IfxLobDescriptor loDesc = new IfxLobDescriptor(myConn);
IfxLocator loPtr = new IfxLocator();
IfxSmartBlob smb = new IfxSmartBlob(myConn);

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 145 -

int loFd = smb.IfxLoCreate(loDesc, smb.LO_RDWR, loPtr);
int n = smb.IfxLoWrite(loFd, fin, fileLength);
smb.IfxLoClose(loFd);
loFd = smb.IfxLoOpen(loPtr, smb.LO_RDWR);
long m = smb.IfxLoSeek(loFd, 200, smb.LO_SEEK_SET);
将写位置设置在从智能大对象开头的 200 字节偏移量处。
从智能大对象读取数据
可以下列方式从智能大对象读取数据:

将数据从对象读取至 byte[ ] 缓冲区内。

将数据从对象读取至文件输出流内。

将数据从对象读取至文件内。
请使用 IfxSmartBlob 类中的 IfxLoRead() 方法来从智能大对象读取至缓冲区内或文件输出
流内,其有下列签名:
public byte[] IfxLoRead(int lofd, int nbytes) throws SQLException
public int IfxLoRead(int lofd, byte[] buffer, int nbytes) throws
SQLException
public int IfxLoRead(int lofd, FileOutputStream fout, int nbytes
throws SQLException
public int IfxLoRead(int lofd, byte[] buffer, int nbytes, int
offset throws SQLException
lofd 参数是由 IfxLoRead() 或 IfxLoOpen() 方法返回的定位器文件描述符。
第一个版本将 nbytes 字节数据返回至字节缓冲区内。此版本的方法为缓冲区分配内存。第
二个版本将 nbytes 字节数据读至已分配了的缓冲区内。第三个版本将 nbytes 字节数据读至
文件输出流内。第四个版本将 nbytes 字节数据读至在当前查找位置加上智能大对象内偏移
量处开始的字节缓冲区内。最后三个版本的返回值指示读取的字节数。
使用 IfxSmartBlob 类中的 IfxLoToFile() 方法,来从智能大对象读取至文件内,其有下列签
名:
public int IfxLoToFile(IfxLocator loPtr, String filename, int flag , int whence) throws
SQLException
public int IfxLoToFile(IfxBblob blob, String filename, int flag , int whence) throws
SQLException
public int IfxLoToFile(IfxCblob clob, String filename, int flag , int whence) throws
SQLException
第一个版本读取由定位器指针 loPtr 引用的智能大对象。
第二个和第三个版本分别读取由指
定的 IfxBblob 和 IfxCblob 对象引用的智能大对象。

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 146 -

flag 参数指示该文件是在客户机上,还是在服务器上。该值
为 IfxSmartBlob.LO_CLIENT_FILE 或 IfxSmartBlob.LO_SERVER_FILE。whence 参数指示
开始的查找位置。要了解这些值,请参阅 智能大对象内的位置。
提示: 在下列函数的签名中,已有一更改:
IfxSmartBlob.IfxLoToFile().
此函数用于接受四个参数,但现在仅接受三个参数。IfxLoToFile() 的所有三个重载的函数
都接受三个参数。
将数据写至智能大对象
可以下列方式将数据写至智能大对象:

将数据从 byte[ ] 缓冲区写至该对象。

将数据从文件输入流写至该对象。

将数据从文件写至该对象。
使用 IfxSmartBlob 类中的 IfxLoWrite() 方法,从 byte[ ] 缓冲区或文件输入流写至智能大对
象:
public int IfxLoWrite(int lofd, byte[] buffer) throws SQLException
public int IfxLoWrite(int lofd, InputStream fin, int length)
throws SQLException
该方法的第一个版本将 buffer.length 字节数据从缓冲区写至智能大对象内。第二个版本
将 length 字节数据从 InputStream 对象写至智能大对象内。
lofd 参数是由 IfxLoCreate() 或 IfxLoOpen() 方法返回的定位器文件描述符。buffer 参数是读
数据处的 byte[] 缓冲区。fin 是 InputStream 对象,将数据从其写至智能大对象内。length 参
数是写至智能大对象内的字节数。驱动程序返回写入的字节数。
请使用 IfxSmartBlob 类中的 IfxLoFromFile() 方法,来将数据从文件写至智能大对象:
public int IfxLoFromFile (int lofd, String filename, int flag, int offset, int amount) throws
SQLException
lofd 参数是由 IfxLoCreate() 或 IfxLoOpen() 方法返回的定位器文件描述符。flag 参数指示该
文件是在客户机上,还是在服务器上。该值为
IfxSmartBlob.LO_CLIENT_FILE 或 IfxSmartBlob.LO_SERVER_FILE。
驱动程序返回写入的字节数。
截断智能大对象
请使用 IfxSmartBlob 类中的 IfxLoTruncate() 方法,来在指定的偏移量处截断大对象。该方
法签名如下:
public void IfxLoTruncate(int lofd, long offset) throws
SQLException

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 147 -

offset 参数是截断智能大对象处的绝对位置。
度量智能大对象
请使用 IfxSmartBlob 类中的 IfxLoSize() 方法,来返回智能大对象的大小。此方法返回表示
大对象大小的一个长整数。
该方法签名如下:
public long IfxLoSize(int lofd) throws SQLException
关闭和释放智能大对象
在执行了应用程序需要的所有操作之后,
您必须关闭该对象,
然后,
释放服务器中的资源。
执行这些任务的 IfxSmartBlob 类中的方法如下:
public void IfxLoClose(int lofd) throws SQLException
public void IfxLoRelease(IfxLocator loPtr) throws SQLException
public void IfxLoRelease(IfxBblob blob) throws SQLException
public void IfxLoRelease(IfxCblob clob) throws SQLException
要对同一大对象进行任何进一步访问,必须以 IfxLoOpen() 方法来重新打开它。
将 IfxLocator 转换为十六进制字符串
有些应用程序只能处理 ASCII 数据,例如,web 浏览器;它们需要将 IfxLocator 转换为
十六进制字符串格式。在典型的基于 web 的应用程序中,web 服务器查询数据库表,并
将结果发送至浏览器。不是发送整个智能大对象,web 服务器将定位器转换为十六进制字
符串格式,并将它发送至浏览器。如果用户请求浏览器显示智能大对象,则浏览器将十六
进制格式的定位器发回 web 服务器。然后,web 服务器从该十六进制字符串重构二进制
定位器,并将对应的智能大对象数据发送至浏览器。
要在 IfxLocator 字节数组与十六进制数值之间转换,请使用罗列在下表中的方法。
执行的任务
方法签名
附加的信息
将字节数组转换
为十六进制字符

public static String
toHexString( byte[] byteBuf);
对数据有效,而不是对在
com.gbasedbt.util.stringUtil
类中提供的 IfxLocator
将十六进制字符
串转换为字节数

public static byte[]
fromHexString( String str)
throws NumberFormatException;
对数据有效,而不是对
com.gbasedbt.util.stringUtil
类中提供的 IfxLocator
使用字节数组构
造一个
public
IfxLocator(byte[] byteBuf)
在 IfxLocator 类中提供

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 148 -

执行的任务
方法签名
附加的信息
IfxLocator 对象 throws SQLException;
将 IfxLocator
字节数组转换为
十六进制字符串
public String toString();
在 IfxLocator 类中提供
将十六进制字符
串转换为
IfxLocator 字节
数组
public byte[] toBytes();
在 IfxLocator 类中提供
下列示例使用 toString() 和 toBytes() 方法,来从智能大对象访存定位器,然后,将它转换为
十六进制字符串:
...

String hexLoc = "";
byte[] blobBytes;
byte[] rawLocA = null;
IfxLocator loc;
try
{
ResultSet rs = stmt.executeQuery("select b1 from btab");
while(rs.next())
{
IfxBblob b=(IfxBblob)rs.getBlob(1);
loc =b.getLocator();
hexLoc = loc.toString();
rawLocA = loc.toBytes();
}
}
catch(SQLException e)
{}
下列示例使用 IfxLocator() 方法来构建 IfxLocator,然后使用其来读取智能大对象:
...
try
{

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 149 -

IfxLocator loc2 = new IfxLocator(rawLoc);
IfxSmartBlob b2 = new IfxSmartBlob((IfxConnection)myConn);
int lofd = b2.IfxLoOpen(loc2, b2.LO_RDWR);
blobBytes = b2.IfxLoRead(lofd, fileLength);
}
catch(SQLException e)
{}

pg_archivecleanup 是一个用于清理旧的归档日志的工具。