How to Store and Retrieve Image on SQLite/de
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();
}