Verwaltung und Programmierung


Beispiele

Eine Werbeagentur verwaltet eine DB2-Datenbank mit Ihren Werbekampagnen. In der Vergangenheit speicherte die Agentur numerische Daten und Zeichendaten zu jeder Werbekampagne, wie z. B. Name des Kunden und das Datum der Fertigstellung. Mit der Installation von DB2 Version 5 und den DB2 Extendern speichert die Agentur jetzt auch den Inhalt der Objekte für die Werbung in der Datenbank. Dazu gehören Abbilder von Werbeanzeigen, Videos von Fernsehwerbespots und Aufzeichnungen von Radiowerbespots. Wie die folgende Abbildung zeigt, befinden sich alle zugehörigen Informationen zur Werbung in einer Datenbanktabelle mit dem Namen ADS. Die Tabelle enthält Abbild-, Audio- und Videodaten sowie herkömmliche Datentypen. Ein Video, Audiodaten und ein Abbild werden gezeigt.

Abbildung 1. Eine Multimediadatenbanktabelle


REQTEXT

Beispiel 1: Ein Video anhand seiner Merkmale abrufen

Ein Kundenbetreuer in der Werbeagentur möchte die Videowerbespots anzeigen, die für den Kunden IBM im Jahre 1997 erstellt wurden, wobei er nur die Spots sehen möchte, die höchstens 30 Sekunden lang sind.

Die folgende Abbildung zeigt eine Abfrage, die auf die Videos zugreift. Beachten Sie die Video Extender-UDFs Filename und Duration in der Abfrage.

Abbildung 2. Eine Abfrage, die auf Videos zugreift

SELECT Filename(Ads_video)
FROM ADS
WHERE Client='IBM' AND
Ship_date>='01/01/1997' AND
Duration(Ads_video) <=30

Die Abfrage gibt die Dateinamen der gewünschten Videos zurück. Der Kundenbetreuer kann danach seine bevorzugte Videowiedergabeeinheit starten und den Inhalt der einzelnen Videodateien wiedergeben.

Das vorherige Beispiel zeigt eine Abfrage, die der Kundenbetreuer interaktiv eingeben kann. Normalerweise würde der Kundenbetreuer ein Anwendungsprogramm verwenden, um die Videos zu suchen und wiederzugeben. Das folgende Beispiel zeigt einige Schlüsselelemente einer solchen Anwendung, die in C codiert ist. Die Anwendung ruft die Videodateinamen in eine DB2-Host-Variable mit dem Namen hvVid_fname ab. Beachten Sie außerdem, daß die Anwendung die Wiedergabe-API, DBvPlay, verwendet, um die Videos wiederzugeben.

Abbildung 3. Eine Anwendung, die auf Videos zugreift und sie wiedergibt

#include <dmbvideo.h>

int count = 0;

EXEC SQL BEGIN DECLARE SECTION;
char hvClient[30];                      /*client name*/
char hvCampaign[30];                    /*campaign name*/
char hvSdate[8];                        /*ship date*/
char hvVid_fname [251]                  /*video file name*/
EXEC SQL END DECLARE SECTION;


EXEC SQL DECLARE c1 CURSOR FOR
     SELECT Client, Campaign, Ship_date, Filename(Ads_video)
       FROM ADS
       WHERE Client='IBM' AND
         Ship_date>='01/01/1997' AND
         Duration(Ads_video)<=30
FOR FETCH ONLY;

EXEC SQL OPEN c1;
for (;;) {
        EXEC SQL FETCH c1 INTO :hvClient, :hvCampaign,
                         :hvSdate, :hvVid_fname;

         if (SQLCODE != 0)
                   break;

    printf("\nRecord %d:\n", ++count);
    printf("Client = '%s'\n", hvClient);
    printf("Campaign = '%s'\n", hvCampaign);
    printf("Sdate = '%s'\n", hvSdate);

    rc=DBvPlay(NULL,MMDB_PLAY_FILE,hvVid_fname,MMDB_PLAY_WAIT);
}
EXEC SQL CLOSE c1;

Beispiel 2: Abbilder anhand des Inhalts suchen

Ein Grafiker in der Werbeagentur entwickelt eine neue Anzeige für einen Kunden. Der Grafiker möchte einen besonderen Blauton als Hintergrundfarbe in der Anzeige verwenden und möchte wissen, ob diese Farbe bereits zuvor in einer Anzeige der Agentur verwendet wurde. Dazu führt er eine Anwendung aus, die nach Abbildern anhand des Inhalts sucht. Die Abbilder sind in einer Datenbanktabelle gespeichert (siehe Abbildung 1). Die Anwendung fordert den Benutzer auf, ein visuelles Beispiel zur Verfügung zu stellen, d. h. ein Abbild, das die suchende Farbe darstellt. Die Anwendung analysiert dann die Farbe im Beispiel und sucht nach Abbildern, deren Farbe am meisten mit dem Beispiel übereinstimmt.

Die folgende Abbildung zeigt ein visuelles Beispiel und die abgerufenen Abbilder, die am weitesten mit dessen Farbe übereinstimmen.

Abbildung 4. Abbilder anhand des Inhalts suchen


REQTEXT

Das folgende Beispiel einige Schlüsselelemente der Anwendung. Beachten Sie, daß die Anwendung die QBIC-API QbQueryCreate verwendet, um eine QBIC-Abfrage zu erstellen, die APIs QbQueryAddFeature und QbQuerySetFeatureData, um die Farbauswahl zur Abfrage hinzuzufügen, die API QbQuerySearch, um die Abfrage abzusetzen, und die API QbQueryDelete, um die Abfrage zu löschen. Die Anwendung verwendet außerdem die grafische API DBiBrowse, um die abgerufenen Abbilder anzuzeigen.

Abbildung 5. Eine Anwendung, die nach Abbildern anhand des Inhalts sucht

#include <dmbqbqpi.h>

#define MaxQueryReturns  10

static  SQLHENV    henv;
static  SQLHDBC    hdbc;
static  SQLHSTMT   hstmt;
static  SQLRETURN  rc;

void main(int argc, char* argv[])
{
 char           line[4000];
 char*          handles[MaxQueryReturns];
 QbQueryHandle  qHandle=0;
 QbResult       results[MaxQueryReturns];
 SQLINTEGER     count;
 SQLINTEGER     resultType=qbiArray;

 SQlAllocEnv(&henv);
 SQLAllocConnect(henv, &hdbc);
 rc = SQLConnect(hdbc, (SQLCHAR*)"qtest", SQL_NTS,
              (SQLCHAR*)"", SQL_NTS, (SQLCHAR*)"", SQL_NTS);

 if (argc !=2) {
 printf("usage: query colorname\n");
                exit(1);
 }

 QbImageSource is;
      is.type = qbiSource_AverageColor;

 /* run the get color subroutine */
 getColor(argv[1], is.average.Color);

 QbQueryCreate(&qhandle);
 QbQueryAddFeature(qhandle, "QbColorFeatureClass");
 QbQuerySetFeatureData(qhandle, "QbColorFeatureClass",&is);
 QbQuerySearch(qhandle, "ADS", "ADS_IMAGE", 10, 0, resultType
                            &count, results);
 for (int j = 0; j <count; j++) {
 printf(j,":\n");

 DBiBrowse("usr/local/bin/xv %s", MMDB_PLAY_HANDLE, handles[j],
                MMDB_PLAY_WAIT);
 }


QbQueryDelete(qhandle);

 SQLDisconnect(hdbc);
 SQLFreeConnect(hdbc);
 SQLFreeEnv(henv);
}


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

Search the DB2 Extender Books