How to Store and Retrieve Image on SQLite/de

From Qt Wiki
Jump to: navigation, search
Deutsch | English | Español | Български

Speichern und Abfragen eines Bildes/ einer Datei mit SQLite

Bilder und jede andere Datei können in einer Datenbank gespeichert werden. Der folgende Code-Schnipsel zeigt, wie eine Bilddatei in eine Datenbank gespeichert und wieder angezeigt wird.

1. Die System-Datei in ein QByteArray einlesen 2. Das QByteArray als Binary Large Object (BLOB) in der Datenbank speichern

Beispiel :

  1. include <QtSql>
  2. include <QtWidgets>

int main( int argc, char *argv[] ) {

   QApplication app( argc, argv );

   // Set up database
   QString dbName( "myDatabase.db3" );
   QFile::remove( dbName ); // alte sqlite-datei löschen
   QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" );
   db.setDatabaseName( dbName );
   db.open();
   QSqlQuery query = QSqlQuery( db );
   query.exec( "CREATE TABLE IF NOT EXISTS imgTable ( filename TEXT, imagedata BLOB )" );

   // Bild generieren (in diesem Fall ein Screenshot) und in ein QByteArray speichern
   QScreen *screen = app.primaryScreen();
   QPixmap inPixmap = screen->grabWindow( 0 );
   QByteArray inByteArray;
   QBuffer inBuffer( &inByteArray );
   inBuffer.open( QIODevice::WriteOnly );
   inPixmap.save( &inBuffer, "PNG" ); // schreibe Pixmap in QByteArray im PNG-Format

   // Lade alternativ ein Bild aus einer Datei in ein QByte-Array
   // QFile file("screenshot.png");
   // if (!file.open(QIODevice::ReadOnly)) return;
   // QByteArray inByteArray = file.readAll();

   // Bild-Bytes in Datenbank schreiben
   // Hinweis: Achte darauf, dass die :platzhalter in Klammern stehen
   query.prepare( "INSERT INTO imgTable (filename, imagedata) VALUES ('screenshot.png', :imageData)" );
   query.bindValue( ":imageData", inByteArray );
   if( !query.exec() )
       qDebug() << "Fehler beim Einfuegen des Bildes in die Datenbank:\n" << query.lastError();

   // Das Bild aus der Datenbank laden
   if( !query.exec( "SELECT imagedata from imgTable" ))
       qDebug() << "Fehler beim Laden des Bildes aus der Datenbank:\n" << query.lastError();
   query.first();
   QByteArray outByteArray = query.value( 0 ).toByteArray();
   QPixmap outPixmap = QPixmap();
   outPixmap.loadFromData( outByteArray );
   db.close();

   // Bild anzeigen
   QLabel myLabel;
   myLabel.setPixmap( outPixmap );
   myLabel.show();

   return app.exec();

}