Qt : Sauvegarder et récupérer une image dans une base de données

Posté par seiyar81 le 3 avril 2013 | Laisser un commentaire (0)

Tous les SGBD, qu’il s’agisse de bases SQL ou NoSQL, permettent de stocker des données au format binaire.

Pour les principaux : MySQL, MariaDB possèdent les types BLOB, BINARY ou VARBINARY, SQLite offre aussi un type BLOB, PostgreSQL un type BYTEA.

Il peut être utile ou nécessaire de pouvoir stocker/charger une QImage dans une base de données.

Pour la sauvegarder :


    // On ouvre la connexion à la base de données
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "mybase");
    db.setHostName("localhost");
    db.setDatabaseName("mybase");
    db.setUserName("root");
    db.setPassword("");
    db.setPort(5432);

    db.open();

    QImage image("mon_image.png");
    QByteArray byteArray;
    QBuffer buffer(&byteArray);
    image.save(&buffer, "PNG");

    QSqlQuery query(db);
    query.prepare("INSERT INTO image (data) VALUES (:data)");
    query.bindValue(":data", byteArray, QSql::Binary);
    query.exec();

Pour la charger :


    QSqlQuery query(db);
    query.prepare("SELECT * FROM image WHERE id = :id");
    query.bindValue(":id", 42);

    q.exec();

    QImage image;
    QByteArray byteArray = query.value(1).toByteArray();
    QBuffer buffer(&byteArray);
    image.load(&buffer, "PNG");

Catégorie: C++, Qt | Laisser un commentaire (0)