GBase8s BYTE 和 TEXT 数据类型

GBase 8s BYTE 和 TEXT 数据类型,以及如何以 JDBC API 来操纵这些数据 类型的列。

BYTE 数据类型是在不可分的字节流中存储任何数据的简单大对象数据类型。此二进制数 据的示例包括电子表格、数字化的语音模式以及视频片段。TEXT 数据类型是存储任何文 本数据的简单大对象数据类型。它可同时包含单个的和多字节的字符。

任一数据类型的列都有 231 字节的理论限制,实际限制取决于磁盘容量。

1、高速缓存大对象

每当从数据库服务器访存 BLOB、CLOB、text 或 byte 类型的对象时,都在客户机内存中 高速缓存该数据。如果大对象的大小大于 LOBCACHE 环境变量中的值,则在临时文件中 存储大对象数据。要获取关于 LOBCACHE 变量的更多信息,请参阅 大对象的内存管理。

2、示例:插入或更新数据

要插入至 BYTE 或 TEXT 列,或更新这些列,请从源读取诸如操作系统文件这样的数据 流,并将它作为 java.io.InputStream 对象传送至数据库。PreparedStatement 提供设置此 Java ™ 输入流的输入参数的方法。当执行该语句时,GBase 8s JDBC Driver 反复地调用该输入流, 读取它的内容,并将这些内容作为实际的参数数据传送至数据库。

来自 ByteType.java 程序的下列示例展示如何将操作系统文件 data.dat 的内容插入至 BYTE 数据类型的列内:

try
 {
 stmt = conn.createStatement();
 stmt.executeUpdate("create table tab1(col1 byte)");
 }
 catch (SQLException e)
 {
 System.out.println("Failed to create table ..." + e.getMessage());
 }
 
 try
 {
 pstmt = conn.prepareStatement("insert into tab1 values (?)");
 }
 catch (SQLException e)
 {
 System.out.println("Failed to Insert into tab: " + e.toString());
 }
 
 File file = new File("data.dat");
 int fileLength = (int) file.length();
 InputStream value = null;
 FileInputStream fileinp = null;
 int row = 0;
 String str = null;
 int rc = 0;
 ResultSet rs = null;
 
 System.out.println("Inserting data ...\n");
 
 try
 {
fileinp = new FileInputStream(file);
 value = (InputStream)fileinp;
 }
 catch (Exception e) {}
 
 try
 {
 pstmt.setBinaryStream(1,value,10); //set 1st column
 }
 catch (SQLException e)
 {
 System.out.println("Unable to set parameter");
 }
 
 set_execute();
  ...
 public static void set_execute()
 {
 try
 {
 pstmt.executeUpdate();
 }
 catch (SQLException e)
 {
 System.out.println("Failed to Insert into tab: " + e.toString());
 e.printStackTrace();
 }
 }

该示例首先创建一个表示操作系统文件 data.dat 的 java.io.File 对象。然后,该示例创 建 FileInputStream 对象,来从 File 类型的对象读取。将FileInputStream 类型的对象强制 转型为它的超类 InputStream,其为 PreparedStatement.setBinaryStream() 方法的第二个参数 所需的数据类型。在已准备好的 INSERT 语句上执行 setBinaryStream() 方法,其设置输入 流参数。最后,PreparedStatement.executeUpdate() 方法执行,其将 data.dat 操作系统文件的 内容插入至 BYTE 类型的列内。

TextType.java 程序展示如何将数据插入至 TEXT 类型的列内。它类似于插入至 BYTE 类 型的列内,只使用 setAsciiStream() 方法来设置输入参数,而不是使用 setBinaryStream()。

3、示例:选择数据

在从表选择至 ResultSet 对象内之后,您可使用 ResultSet.getBinaryStream() 方法来从 BYTE 类型的列检索二进制或 ASCII 数据流。您还可使用ResultSet.getAsciiStream() 方法来从 TEXT 类型的列检索二进制或 ASCII 数据流。两个方法都返回 InputStream 对象,可使用 其来读取 chunk 中的数据。

 在调用 next() 方法来检索下一行之前,必须读取当前行中返回的流中的所有数据。

 来自 ByteType.java 程序的下列示例展示如何从 BYTE 类型的列选择数据,并将数据打印 至标准输出设备:

try
 {
 stmt = conn.createStatement();
 rs = stmt.executeQuery("Select * from tab1");
 while( rs.next() )
 {
 row++;
 value = rs.getBinaryStream(1);
 dispValue(value);
 }
 }
 catch (Exception e) { }
 
 ...
 
 public static void dispValue(InputStream in)
 {
 int size;
 byte buf;
 int count = 0;
 try
 {
 size = in.available();
 byte ary[] = new byte[size];
 buf = (byte) in.read();
while(buf!=-1)
 {
 ary[count] = buf;
 count++;
 buf = (byte) in.read();
 }
 }
 catch (Exception e)
 {
 System.out.println("Error occured while reading stream ... \n");
 }
 }

该示例首先将 SELECT 语句的结果放入 ResultSet 对象内。然后,它执行方 法 ResultSet.getBinaryStream(),来将 BYTE 数据检索至 Java™InputStream 对象内。 示例中也包括方法 dispValue() 的 Java 代码,使用其来将该列的内容打印至标准输出设备。 dispValue() 方法使用字节数组,且InputStream.read() 方法系统地读取 BYTE 类型列的内容。 TextType.java 程序展示如何从 TEXT 类型列选择数据。它类似于从 BYTE 类型列选择, 只使用 getAsciiStream() 方法,而不使用getBinaryStream()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gbase8s 是一个高性能的分布式关系型数据库,而MySQL则是一个常用的关系型数据库管理系统。将数据从gbase8s迁移到MySQL可以通过以下几个步骤完成。 首先,我们需要创建一个MySQL数据库,确保其具备与gbase8s相同的表结构。可以通过使用CREATE TABLE语句在MySQL创建相应的表,注意确保表结构和列的数据类型与gbase8s的表一致。 接下来,我们需要将gbase8s的数据导出为SQL文件。可以使用导出工具,如mysqldump或SELECT INTO OUTFILE语句来完成此操作。导出的SQL文件包含了从gbase8s提取数据的语句。 然后,我们可以将导出的SQL文件导入到MySQL数据库。可以使用MySQL的命令行工具或者图形化界面工具,如MySQL Workbench来执行导入操作。将SQL文件导入到MySQL后,即可将数据插入到对应的表。 在数据迁移过程,需要注意一些数据类型和语法的差异。例如,某些数据类型在gbase8s可能与MySQL不完全相同,此时需要进行相应的转换或调整。此外,还需要注意主键、索引、约束等方面的差异,以确保数据的完整性和一致性。 最后,进行数据迁移后,建议对新迁移的数据进行验证和测试,以确保数据迁移的准确性和完整性。 综上所述,在迁移gbase8s数据到MySQL时,我们需要创建MySQL数据库,导出gbase8s的数据为SQL文件,然后将SQL文件导入到MySQL数据库,并进行必要的数据类型和语法转换。最后,验证和测试迁移后的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值