Image, Audio und Video Extender Verwaltung und Programmierung


Einführung in die Programmierung für die DB2 Extender

Bevor Sie mit der Entwicklung eines Programms beginnen, das die DB2 Extender verwendet, sollten Sie mit dem DB2-Anwendungsentwicklungsprozeß und den verwendeten Programmiertechniken vertraut sein. Diese werden im Handbuch DB2 Application Development Guide beschrieben. Der Entwicklungsprozeß für Programme, die die DB2 Extender verwenden, ist zum größten Teil identisch mit dem Prozeß für herkömmliche DB2-Anwendungen.

Aufgrund der neuen Datentypen und Funktionen, die von den Extendern definiert werden, unterscheidet sich jedoch der Programmcode der Anwendung von herkömmlichen DB2-Anwendungen. In der folgenden Abbildung wird beispielsweise eine in der Programmiersprache C codierte Anwendung dargestellt, die den Image Extender verwendet, um GIF-Abbilder zu identifizieren, die in einer Datenbanktabelle gespeichert sind. Nach dem Auffinden der Abbilder ruft das Programm einen Abbild-Browser auf, um sie anzuzeigen.

Wie dieses Beispiel verdeutlicht, muß eine Anwendung, die einen DB2 Extender verwendet, folgende Funktionen ausführen:

(1)Extender-Definitionen einschließen. Im angeführten Beispiel ist die Datei dmbimage.h die Include-Datei (Kopfdatei) für den Image Extender. Die Include-Datei definiert die Konstanten, Variablen und Funktionsprototypen für den Extender.

(2)Nach Bedarf Host-Variablen definieren, die Eingaben für oder Ausgaben aus einer benutzerdefinierten Funktion (UDF) oder Eingaben für einen API-Aufruf enthält. Im angeführten Beispiel sind die Variablen hvFormat, hvSize, hvWidth, hvHeight und hvComment Host-Variablen, die verwendet werden, um die Daten aufzunehmen, die von den UDFs des Image Extenders abgerufen wurden. Die Host-Variable hvImg_hdl wird verwendet, um eine Abbildkennung aufzunehmen, das als Eingabe für einen Image Extender-API-Aufruf angegeben wurde.

(3)Nach Bedarf UDF-Anforderungen angeben. Im angeführten Beispiel sind die Funktionen SIZE, WIDTH, HEIGHT, COMMENT und FORMAT Image Extender-UDFs.

(4)Nach Bedarf API-Aufrufe definieren. Im angeführten Beispiel ist der Aufruf DBiBrowse ein API-Aufruf einer lokalen Funktion in der Programmiersprache C, die die Abbilder, deren Kennungen aus einer Tabelle abgerufen wurden, anzeigt.

Abbildung 18. Anwendung, die einen DB2 Extender verwendet

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlenv.h>
#include <sqlcodes.h>
#include <dmbimage.h> (1)
 
int count=0;
 
long
main(int argc,char *argv[])
{
EXEC SQL BEGIN DECLARE SECTION; (2)
         char hvImg_hdl[251];                   /* image handle */
         char hvDBName[19];                     /* database name */
         char hvName[40];                       /* employee name */
         char hvFormat[9];                      /* image format */
         long hvSize;                           /* image size */
         long hvWidth;                          /* image width */
         long hvHeight;                         /* image height */
         struct  {
       short len;
                  char data[32700]
         } hvComment;                           /* comment about the image */
 EXEC SQL END DECLARE SECTION;
 
/*  Connect to database  */
 
strcpy(hvDBName, argv[1]);                      /* copy the database name */
 
EXEC SQL CONNECT TO :hvDBName IN SHARE MODE;
/*
 * Set current function path
*/
EXEC SQL SET CURRENT FUNCTION PATH = mmdbsys, CURRENT FUNCTION PATH;
/*
 * Select (query) using Image Extender UDF
 *
 * The SQL statement below finds all images in GIF format.
 */
EXEC SQL DECLARE c1 CURSOR FOR
         SELECT PICTURE, NAME,                (3)
                SIZE(PICTURE), WIDTH(PICTURE),
                HEIGHT(PICTURE), COMMENT(PICTURE)
  FROM EMPLOYEE
         WHERE PICTURE IS NOT NULL AND
               FORMAT(PICTURE) LIKE 'GIF%'
FOR FETCH ONLY;
 
EXEC SQL OPEN c1;
for (;;) {
         EXEC SQL FETCH c1 INTO :hvImg_hdl, :hvName, :hvSize,
                                :hvWidth, :hvHeight, :hvComment;
         if (SQLCODE != 0)
                   break;
 
         printf("\nRecord %d:\n", ++count);
         printf("employee name = '%s'\n", hvName);
         printf("image size = %d bytes, width=%d, height=%d\n",
                                                 hvSize, hvWidth, hvHeight);
         hvComment.data[Comment.len]='\0';
         printf("comment len = %d\n", hvComment.len);
 printf("comment = %s\n", hvComment.data);
/*
* The API call below displays the images
*/
(4) rc=DBiBrowse ("ib %s",MMDB_PLAY_HANDLE,hvImg_hdl,
                         MMDB_PLAY_WAIT);
}
 
EXEC SQL CLOSE c1;
 
/* end of program */


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]