How to Store and Retrieve Image on SQLite/de: Difference between revisions
Jump to navigation
Jump to search
AutoSpider (talk | contribs) (Add "cleanup" tag) |
(Komplett aus dem englischen übersetzt und den Code übernommen) |
||
(One intermediate revision by one other user not shown) | |||
Line 7: | Line 7: | ||
'''Deutsch''' | [[How_to_Store_and_Retrieve_Image_on_SQLite|English]] | [[How_to_Store_and_Retrieve_an_Image_or_File_with_SQLite_Spanish|Español]] | [[How_to_Store_and_Retrieve_Image_on_SQLite_Bulgarian|Български]] | '''Deutsch''' | [[How_to_Store_and_Retrieve_Image_on_SQLite|English]] | [[How_to_Store_and_Retrieve_an_Image_or_File_with_SQLite_Spanish|Español]] | [[How_to_Store_and_Retrieve_Image_on_SQLite_Bulgarian|Български]] | ||
= Speichern und Abfragen eines Bildes / einer Datei mit SQLite = | = Speichern und Abfragen eines Bildes/ einer Datei mit SQLite = | ||
Bilder und jede andere Datei | 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 | 1. Die System-Datei in ein QByteArray einlesen | ||
Line 17: | Line 17: | ||
<code> | <code> | ||
QFile file( | #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(); | |||
} | |||
</code> | </code> |
Latest revision as of 03:44, 29 November 2016
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();
}