Extensions Image, Audio et Vidéo Administration et programmation

Préalables à la programmation d'extensions DB2

Avant de développer un programme utilisant les extensions DB2, vous devez être familiarisé avec le processus de développement d'applications DB2 et les techniques de programmation décrites dans le manuel DB2 Application Development Guide. Le processus de développement de programmes utilisant les Extensions DB2 est pratiquement identique à celui utilisé pour les applications DB2 classiques.

Le code de votre programme d'application sera légèrement différent de celui utilisé pour une application DB2 classique, en raison de nouveaux types de données et des fonctions définies par les Extensions. Par exemple, la , figure suivante illustre une application codée en langage C, utilisant l'extension Image pour l'identification d'images au format GIF stockées dans la table de base de données. Une fois les images identifiées, le programme fait appel à un afficheur d'images pour permettre leur visualisation.

Comme présenté dans l'exemple, une application utilisant une extension DB2 doit effectuer les fonctions suivantes :

(1)Inclusion des définitions d'extension. Le fichier dmbimage.h utilisé dans l'exemple est le fichier d'inclusion (en-tête) pour l'extension Image. Il définit les constantes, les variables et les prototypes de fonction pour l'extension.

(2)Définition des variables SQL en fonction des besoins pour qu'elles contiennent une entrée ou une sortie d'une fonction UDF ou une entrée pour un appel d'API. Dans l'exemple indiqué, hvFormat, hvSize, hvWidth, hvHeight et hvComment sont des variables SQL qui doivent contenir des données extraites par les fonctions UDF de l'extension Image. La variable SQL hvImg_hdl doit contenir un descripteur d'image défini en entrée d'appel API d'une extension Image.

(3)Indication des requêtes de fonction UDF en fonction des besoins. Dans l'exemple indiqué, SIZE, WIDTH, HEIGHT, COMMENT et FORMAT sont des fonctions UDF de l'extension Image.

(4)Indication des appels API en fonction des besoins. Dans l'exemple indiqué, DBiBrowse est un appel API vers une fonction locale en langage C, qui affiche des images dont les descripteurs sont extraits d'une table.

Figure 18. Application utilisant une extension DB2

#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];                   /* descripteur d'image */
         char hvDBName[19];                     /* nom de base de données */
         char hvName[40];                       /* nom de l'employé */
         char hvFormat[9];                      /* format de l'image */
         long hvSize;                           /* taille de l'image */
         long hvWidth;                          /* largeur de l'image */
         long hvHeight;                         /* hauteur de l'image */
struct {
        short len;
                  char data[32700]
         } hvComment;                           /* commentaire sur l'image */
 EXEC SQL END DECLARE SECTION;
 
/*  Connexion à une base de données  */
 
strcpy(hvDBName, argv[1]);                      /* copie du nom de la base de données */
 
EXEC SQL CONNECT TO :hvDBName IN SHARE MODE;
/*
 * Définition du chemin des fonctions en cours
*/
EXEC SQL SET CURRENT FUNCTION PATH = mmdbsys, CURRENT FUNCTION PATH;
/*
 * Sélection (requête) utilisant une fonction UDF d'extension Image
 *
 * L'instruction SQL ci-dessous recherche toutes les images au format GIF.
 */
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("nom employé = '%s'\n", hvName);
         printf("taille image = %d octets, 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);
/*
* L'appel d'API ci-après affiche les images
*/
(4) rc=DBiBrowse ("ib %s",MMDB_PLAY_HANDLE,hvImg_hdl,
                         MMDB_PLAY_WAIT);
}
 
EXEC SQL CLOSE c1;
 
/* fin du programme */


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]