How to Store and Retrieve Image on SQLite/de

From Qt Wiki
< How to Store and Retrieve Image on SQLite
Revision as of 03:44, 29 November 2016 by 5x100 (talk | contribs) (Komplett aus dem englischen übersetzt und den Code übernommen)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

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 :

#include <QtSql>
#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();
}