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
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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();
}