Qt4 PostgreSQL Blob-Support
Verfasst: 27. November 2005 13:23
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?
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?