Seite 1 von 1

Qt4 PostgreSQL Blob-Support

Verfasst: 27. November 2005 13:23
von Kai
Hallo,

ich habe Probleme mit dem Blob-Support von PostgreSQL mit Qt4. Binärdateien lassen sich zwar problemlos in ein bytea Feld speichern, die zurückgegebenen Dateien weisen eine identische Länge auf, differerieren aber in etlichen Bytes. Bei Textdateien ist alles OK. Mit Qt3 ist auch alles OK. Ich benutze Qt 3.4.3 und 4.0.1 unter Linux. PostgreSQL 7.4.3 und 8.0.1

Beispiel:

CREATE TABLE image (
image_id BIGINT NOT NULL
, image_data BYTEA NOT NULL
, PRIMARY KEY (image_id)
);


QFile in_file(argv[1]);
in_file.open(QIODevice::ReadOnly);
QByteArray b_in = in_file.readAll();
in_file.close();

QSqlQuery q;
q.prepare("TRUNCATE image;");
q.exec();

q.prepare("INSERT INTO image (image_id, image_data) VALUES(?, ?);");
q.bindValue(0, 1);
q.bindValue(1, b_in);
q.exec();

q.prepare("SELECT image_data FROM image WHERE image_id = 1;");
q.exec();
q.first();
QByteArray b_out = q.value(0).toByteArray();
QFile out_file("imagetest");
out_file.open(QIODevice::WriteOnly);
out_file.write(b_out);
out_file.flush();
out_file.close();

Gibt es eine Lösung?

Verfasst: 27. November 2005 13:53
von BartSimpson
eventuell auch ein bug ähnlich wie in dem MySQL Treiber. Wo ich auch schon 2 Bugs gefunden habe.

Verfasst: 27. November 2005 16:23
von Kai
und es muss beim Auslesen der Daten über SELECT passieren. Wenn ich die Datei über das Qt4 Programm in die Datenbank hochlade, kann ich die Binärdatei über ein Qt3 Programm fehlerfrei auslesen. Die falschen Daten sind nur beim Auslesen über die Qt4-Routine vorhanden. Wo kann man denn da ansetzen? Lohnt es sich mal einen Qt4.1 Snapshot zu installieren?

Verfasst: 27. November 2005 16:52
von BartSimpson
ich würdes es enfach mal versuchen und sonst einen bugreport verfassen

Verfasst: 6. Dezember 2005 14:20
von Kai
Das Problem ist in 4.1rc1 gelöst