IBM Books

Image Extender、Audio Extender 和 Video Extender 管理和程序设计

传送大对象

可用各种方式在应用程序与 DB2 数据库之间传送大对象, 如图象、音频剪辑和视频剪辑。使用的方法取决于是将对象传送至文件或内存缓冲区还是从文件或内存缓冲区传送对象。 使用的方法还取决于文件是在客户机中还是在数据库服务器中。

若是在表和服务器文件之间传送对象

当在数据库表和服务器文件之间传送对象时, 在适当的 Extender UDF 请求中指定文件路径。因为 Extender UDF 和文件都在服务器上,所以 Extender 将能够找到该文件。例如,在以下 SQL 语句中,将其内容在服务器文件中的图象存储在数据库表中:

EXEC SQL BEGIN DECLARE SECTION;
     long hvStorageType;
   EXEC SQL END DECLARE SECTION;
 
hvStorageType=MMDB_STORAGE_TYPE_INTERNAL;
 
EXEC SQL INSERT INTO EMPLOYEE VALUES(
      '128557',
      'Anita Jones',
      DB2Image(
         CURRENT SERVER,
          '/Employee/images/ajones.bmp',
                   'ASIS',
         :hvStorageType,
          'Anita''s picture')
       );

若将对象传送至或传送自客户机缓冲区

Extender 不能直接存取内存缓冲区。如果要将对象传送至或传送自客户机上的缓冲区, 不能使用指定缓冲区位置这种方法,而需要另一种方法。将对象传送至或传送自缓冲区的一种方法是通过主变量。这是在应用程序与 DB2 数据库之间传送对象的常用方法。

通过对传统的字符和数字对象定义和使用主变量的方法, 以对大对象定义和使用主变量。在 DECLARE 节中说明主变量, 对它们赋值以便传送,或存取传送给它们的值。

当说明用于图象、音频或视频数据的主变量时,指定数据类型 BLOB。当使用 UDF 来存储、检索或更新对象时, 在 UDF 请求中指定适当的主变量作为自变量.对 SQL 语句中指定的其他主变量使用相同的格式。

例如,下列 SQL 语句说明并使用名为 hvaudio 的主变量来将音频剪辑传送至数据库:

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB (2M) hvaudio;
   EXEC SQL END DECLARE SECTION;
 
EXEC SQL INSERT INTO EMPLOYEE VALUES(
      '128557',
      'Anita Jones',
      DB2Audio(
          CURRENT SERVER,
          :hvaudio,
          'WAVE',
          CAST(NULL as LONG VARCHAR),
          'Anita''s voice')
       );

使用 LOB 定位器

诸如音频和视频剪辑之类的大对象可能非常大, 使用主变量可能不是最有效率的处理方法。LOB 定位器可能是在应用程序中处理 LOB 的更好的方法。

LOB 定位器是存储在主变量中的小(4 个字节)值, 您的程序可使用它来引用 DB2 数据库中大得多的 LOB。通过使用 LOB 定位器,您的程序可处理 LOB,就象该 LOB 存储在常规主变量中一样。 不同之处在于:无需在数据库服务器与客户机上的应用程序之间传送 LOB。例如,当您选择数据库表中的 LOB 时,LOB 保留在服务器上, 而 LOB 定位器将它移至客户机。

在 DECLARE 节中说明 LOB 定位器,并按使用主变量的方式使用它。当说明用于图象、音频或视频数据的 LOB 定位器时,指定数据类型 BLOB_LOCATOR。例如,下列 SQL 语句说明和使用名为 video_loc 的 LOB 定位器, 以从数据库表中检索视频剪辑:

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB_LOCATOR video_loc;
   EXEC SQL END DECLARE SECTION;
 
EXEC SQL SELECT CONTENT(VIDEO)
     INTO :video_loc
  FROM EMPLOYEE
     WHERE NAME='Anita Jones';

UDF 使用 LOB 定位器:存储、检索和更新图象、音频和视频对象的 DB2 Extender UDF 使用 LOB 定位器。DB2 Extender V1 中的这些 UDF 不使用 LOB 定位器, 因为这一点,所以无法处理大于 2 MB 的对象。此限制强制用户分段传送大于 2 MB 的对象。因为这些 UDF 现在使用 LOB 定位器,2 MB 的限制被除去。

若将对象传送至或传送自客户机文件

使用文件引用变量来将对象传入或传出客户机上的文件。如果使用文件引用变量, 您就不必在应用程序中为大对象分配缓冲区空间。当将文件引用变量与 UDF 配合使用时, DB2 在文件和 UDF 之间直接传送 BLOB 内容.

在 DECLARE 节中说明文件引用变量,并按使用主变量的方式使用它。在说明用于图象、 音频或视频数据的文件引用变量时,指定数据类型 BLOB_FILE。但是,与包含对象的内容的主变量不同,文件引用变量包含文件的名称。文件的大小不能超过为 UDF 定义的 BLOB 大小。

对于如何将文件引用变量用于输入和输出,您有各种选择。通过在您的程序中的文件引用变量结构中设置 FILE_OPTIONS 字段来选择所要的选项。可从下列选项中进行选择:

用于输入的选项:

SQL_FILE_READ。可打开、读和关闭此文件。文件中数据的长度(以字节计)是在打开文件时确定的。文件引用变量结构的 data_length 字段存放文件的长度(以字节计)。

用于输出的选项:

SQL_FILE_CREATE。此选项创建新文件(如果该文件不存在的话)。若文件已存在,则返回错误信息。文件引用变量结构的 data_length 字段存放文件的长度(以字节计)。
SQL_FILE_OVERWRITE。此选项创建新文件(如果该文件不存在的话)。若文件已存在,则新数据将覆盖文件中的数据。文件引用变量结构的 data_length 字段存放文件的长度(以字节计)。
SQL_FILE_APPEND。此选项将输出追加到文件后(如果该文件已存在的话)。如果文件不存在,此选项将创建新文件。文件引用变量结构的 data_length 字段存放添加至文件的数据的长度(以字节计), 而不是文件的总长度。

例如,下列语句说明名为 Img_file 的文件引用变量, 并使用它将内容在客户机文件中的图象存储到数据库表中。注意 FILE_OPTIONS 字段中的 SQL_FILE_READ 赋值:

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB_FILE Img_file;
   EXEC SQL END DECLARE SECTION;
 
strcpy (Img_file.name,"/Employee/images/ajones.bmp");
Img_file.name_length=strlen(Img_file.name);
Img_file.file_options=SQL_FILE_READ;
 
EXEC SQL INSERT INTO EMPLOYEE VALUES(
      '128557',
      'Anita Jones',
      DB2Image(
         CURRENT SERVER,
          :Img_file,
                   'ASIS',
          CAST(NULL as LONG VARCHAR),
          'Anita''s picture')
       );

在传送对象时指定文件名

DB2 Extender 提供了存储、检索或更新对象时如何指定文件名的灵活性。

虽然可对存储、检索和更新操作指定全限定文件名(即,后跟文件名的完整路径), 但最好指定相对文件名。在 AIX、HP-UX 和 Solaris 中, 相对文件名是任何不以斜杠开始的文件名。在 OS/2 和 Windows 中, 相对文件名是任何不以后跟冒号和反斜杠的驱动器盘符开始的文件名。

若指定相对文件名,则 Extender 将使用各种客户机和服务器环境变量中的目录说明作为搜索路径来解析文件名。全路径名由前导部分 (通常与安装点相关)和结尾路径名(它唯一标识所需的文件)组成。结尾路径名在 UDF 中指定。环境变量提供一个前导路径名列表, 尝试解析相对文件名时,将搜索这些路径名。有关 DB2 Extender 用来解析文件名的环境变量的信息, 参见附录 A, 设置 DB2 Extender 的环境变量

Extender 还在适当的时候转换文件名格式。当将文件名传送至服务器时,它被转换为适合于服务器的操作系统的格式。例如,当传送至 AIX 服务器时,诸如 c:\dir1\abc.bmp 之类的 OS/2 文件名被转换为 /dir1/abc.bmp。


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]