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

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