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

From Qt Wiki
Jump to navigation Jump to 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();
}