Difference between revisions of "How to Store and Retrieve Image on SQLite/de"

From Qt Wiki
Jump to: navigation, search
(Komplett aus dem englischen übersetzt und den Code übernommen)
 
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 kann man in einer Datenbank speichern. Der folgende Code-Schnipsel zeigt beispielhaft, wie das mit ein paar Zeilen Code mit SQLite gemacht wird.
+
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(fileName);
+
#include <QtSql>
if (!file.open(QIODevice::ReadOnly)) return;
+
#include <QtWidgets>
QByteArray byteArray = file.readAll();
+
   
 
+
int main( int argc, char *argv[] )
QSqlQuery query;
+
{
query.prepare("INSERT INTO imgtable (imgdata) VALUES (?)");
+
    QApplication app( argc, argv );
query.addBindValue(byteArray);
+
query.exec();
+
    // Set up database
</code>
+
    QString dbName( "myDatabase.db3" );
 
+
    QFile::remove( dbName ); // alte sqlite-datei löschen
Nun kann man das Bild / die Datei ganz normal abfragen:
+
    QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" );
<code>
+
    db.setDatabaseName( dbName );
  QSqlQuery query("SELECT imgdata FROM imgtable");
+
    db.open();
query.next();
+
    QSqlQuery query = QSqlQuery( db );
QByteArray array = query.value(0).toByteArray();
+
    query.exec( "CREATE TABLE IF NOT EXISTS imgTable ( filename TEXT, imagedata BLOB )" );
</code>
+
 
+
    // Bild generieren (in diesem Fall ein Screenshot) und in ein QByteArray speichern
Eine QPixmap aus einem QByteArray erzeugen:
+
    QScreen *screen = app.primaryScreen();
<code>
+
    QPixmap inPixmap = screen->grabWindow( 0 );
QPixmap pixmap = QPixmap();
+
    QByteArray inByteArray;
  pixmap.loadFromData(array);
+
    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();
}