zoukankan      html  css  js  c++  java
  • DB2 9 使用启示(733 查验)认证指南,第 2 局部: DB2 数据独霸(8)

    进修基本看法
    developerWorks








    运用大型对象

    什么是大型对象?

    一些大型数据对象,比如图像和音频,频频需求存储在数据库中。DB2 为存储大型数据对象提供了公用的数据类型。这些数据类型便是所谓的大型对象(LOB)。在本节中,我们未来探讨一下 LOB。作为一名启示人员,您应该可以存储和检索使用法式中的 LOB。

    DB2 提供了三种分比如类型的 LOB 数据类型。一切这些数据类型都可以包容最大为 2 GB 的数据:

    • CLOB —— 包罗最大 2 GB 的字符数据
    • BLOB —— 包罗最大 2 GB 的二进制数据。抱负上,这种二进制数据可所以任何工具(比如图像或音频文件)。
    • Double-Byte Character Large Object (DBCLOB) —— 包罗最大 2 GB 的双字节字符数据。过细,只需当创立的数据库为双字节数据停止了设置时,才干运用这种数据类型。
    • XML —— 包罗最大 2 GB 的 XML 数据。本教程不讨论 XML,但本系列前面的教程会触及到这一主题。

    LOB 值不存储在数据库表中。在数据库表中存储的抱负上是一个描述符。该描述符指向 LOB 的抱负职位。抱负的 LOB 值存储在表空间中。表空间是物理存储单位。一个 LOB 列中存储的并不是抱负的 LOB 数据,而是指向 LOB 数据的一个指针。这种指针被称为“定位符(locator)”。这些所谓的定位符用于暗示 LOB 值。当检索一个 ResultSet 中的数据时,抱负上是在检索定位符,而不是这些定位符所暗示的抱负的 LOB 值。必需显式地哀告所检索的 LOB 值。这种检索被称为“弃世(materialization)”。

    当创立一个表时,可以指定 COMPACTNOT COMPACT 选项。假如指定 COMPACT 选项,那么所存储的 LOB 数据占用最少的空间。但是,假如对 LOB 列实施一次更新将增加所存储的 LOB 的大小,那么在恪守上要支付价格。另一方面,假如指定 NOT COMPACT(默许),那么 LOB 值抱负上另有增加的余地。

    假如指定选项 LOGGED,那么对 LOB 列的更新会纪录在系统日记中。指定 LOGGED 选项可以为此中的数据提供最大限定的保护,当出现介质阻拦时,就可用议决一个向前规复进程重构数据。但是,这也会招致磁盘空间方面的资源(更不消说因将日记写到磁盘而破钞的工夫资源了)。假如不指定,则默许运用 LOGGED 选项。面前当今来看一些 Java 中的例子。

    PREPAREDSTATEMENT PREPAREDSTATEMENT =  
          CONNECTION.PREPARESTATEMENT("INSERT INTO BOOKCOVERS VALUES(?,?)"); 
    FILE IMAGEFILE = NEW FILE("C:\\REDBOOKCOVER.JPG"); 
    INPUTSTREAM INPUTSTREAM = NEW FILEINPUTSTREAM(IMAGEFILE); 
    PREPAREDSTATEMENT.SETSTRING(1," 0738425826"); 
    PREPAREDSTATEMENT.SETBINARYSTREAM(2,INPUTSTREAM,(INT)(IMAGEFILE.LENGTH())); 
    PREPAREDSTATEMENT.EXECUTEUPDATE(); 
    


    上述代码片段将 C: 盘根目次中一个名为 redbookcover.jpg 的文件存储到数据库中。过细若何将文件与一个 InputStream 相干联。这个 InputStream 对象用于填充预置语句中 BLOB 列的值。

    PREPAREDSTATEMENT PREPAREDSTATEMENT = 
    CONNECTION.PREPARESTATEMENT(
       "SELECT BOOKCOVER FROM BOOKCOVERS WHERE BOOKISBN=?"); 
    PREPAREDSTATEMENT.SETSTRING(1, "0738425826"); 
    RESULTSET RESULTSET = PREPAREDSTATEMENT.EXECUTEQUERY(); 
    WHILE (RESULTSET.NEXT()) { 
    	// MATERIALIZATION OF THE BLOB 
    	BLOB BLOB = RESULTSET.GETBLOB(1); 
    	INPUTSTREAM INPUTSTREAM = BLOB.GETBINARYSTREAM(); 
    	FILE FILEOUTPUT = NEW 
    	  FILE("C:\\CLONEDREDBOOKCOVER.JPG"); 
    	FILEOUTPUTSTREAM FO = NEW
    	  FILEOUTPUTSTREAM(FILEOUTPUT); 
    	INT C; 
    	WHILE ((C = INPUTSTREAM.READ()) != -1) 
    	FO.WRITE(C); 
    	FO.CLOSE(); 
    	SYSTEM.OUT.PRINTLN("BLOB RETRIEVED"); 
    


    在上述 Java 代码片段中,首先实施一个预置语句,该语句选择在前一个代码片段中所拔出的 BLOB。需求过细的是,在实施到上面这一行语句之前,抱负的 BLOB 还没有被弃世:

    INPUTSTREAM INPUTSTREAM = BLOB.GETBINARYSTREAM();
    


    输入流用于将检索到的 BLOB 存储到一个名为 clonedredbookcover.jpg 的文件中。检索 CLOB 的语法与检索 BLOB 的语法异常雷同。

    FILE FILEOUTPUT = ;NEW; 
      FILE("C:\\CLONEDREDBOOKABSTRACT.TXT"); 
    FILEOUTPUTSTREAM FO = ;NEW; FILEOUTPUTSTREAM(FILEOUTPUT); 
    INPUTSTREAM IS = CLOB.GETASCIISTREAM(); 
    INT C; 
    WHILE; ((C = IS.READ()) != -1) 
       FO.WRITE(C); 
    FO.CLOSE();
    


    在上述 Java 片段中,存储的 CLOB 被弃世到一个名为 clonedredbookabstract.txt 的新文件中。这是议决运用 CLOB 的 getAsciiStream 方式来完成的。就像检索 BLOB 那样,将流指定给一个 InputStream,然后从后者读取数据,顺次将读取的数据写到 FileOutputStream 中。





    版权声明: 原创作品,应允转载,转载时请务必以超链接体例标明文章 原始因由 、作者信息和本声明。否则将清查法例责任。

  • 相关阅读:
    Badboy参数化
    Badboy运行脚本
    Badboy中创建Suite, test, step和Template
    美食
    Badboy录制模式
    美食
    BadBoy+JMeter来录制和运行Web测试脚本
    JMeter简介及使用JMeter来访问网站
    软件测试的艺术
    泗泾办小卡需要的材料
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1972866.html
Copyright © 2011-2022 走看看