Seite 1 von 1

Datenbankenproblem (Clob) mit Qt

Verfasst: 4. Oktober 2004 07:44
von kleineSchildy
Hallo,

ich stehe vor einem Problem, wo ich einfach nicht auf die Lösung komme.
Folgendes:

Ich habe eine XML-Struktur in einer txt-Datei und möchte diese in eine Zelle einer Datenbank mit dem Datentyp "Clob" reinschreiben. Das Problem dabei ist, daß das XML-File ziemlich groß werden kann und ich deshalb auf QString verzichten muss.
Ich habe es dann mit folgendem versucht:

Code: Alles auswählen

QFile file_neu( "test.txt" ); 
	if (!file_neu.open(IO_ReadOnly)) qWarning( "passiert nix");

	QByteArray testData = file_neu.readAll();

	QSqlQuery insert(database);
	insert.prepare("INSERT INTO test (path, name, content)"
				   "VALUES (:path, :name, :content)");
	insert.bindValue(":path",QString("test2"));
	insert.bindValue(":name",QString(name));
	insert.bindValue(":content",QByteArray(testData));
	insert.exec();

	file_neu.close();
Allerdings schreibt er mir dann nur unverständliches Zeug in die Datenbank.

Hat jemand vielleicht eine Lösung. Es wäre sehr wichtig.

Danke schön.

Viele Grüße
Jana

Verfasst: 4. Oktober 2004 16:31
von Spring-Daniel
Hej Jana,

Erst einmal würde ich mir die Frage stellen, ob es überhaupt sinnvoll ist, so große Dateien in einer Datenbank zu speichern. Auf Dauer macht doch das die Datenbank nur Fett und träge. Also besser vielleicht einfach nur den Dateinamen speichern, und die Dateien selbst in einem bestimmten Ordner anlegen. So würde ich es zumindest machen.

Um auf Dein Problem zurückzukommen: Versuch es doch mal mit QCString. Deklariere also die Variable testData nicht als QByteArray, sondern als QCString.

Keine Garantie das es klappt - Hab mich jetzt nur mal ganz kurz damit beschäftigt (:

Viele Grüße,
Daniel

Verfasst: 7. Oktober 2004 11:00
von kleineSchildy
Hallo,

die Struktur der Datenbank habe ich mir nicht ausgedacht und läßt sich soweit auch erstmal nicht ändern, da ein Programm sie so benutzt, wie sie ist.

Was ist denn der Unterschied von String zu CString?

Grüße
Jana

Verfasst: 7. Oktober 2004 11:11
von kleineSchildy
Auch wenn ich QCString verwende, bleibt ist das "clob" in meiner Datenbank leer :? Es ist zum Verzweifeln.

Code: Alles auswählen

void Database::enterIntoTricsyDB(){

	QFile file_neu( "layout.txt" );
	file_neu.open(IO_ReadOnly);

	QCString Data;
	Data = file_neu.readAll();
	
	QVariant clob(Data);
	clob.cast(QVariant::String);

	QSqlQuery insert(database);
	insert.prepare("INSERT INTO maps (path, name, content)"
				   "VALUES (:path, :name, :content)");
	insert.bindValue(":path",QString("."));
	insert.bindValue(":name",QString(layout_name));
	insert.bindValue(":content", Data);
	insert.exec();
}
Damit hat es funktioniert, bis mein XML-File größer als 1KB war, dann war mein "clob" einfach nurnoch leer. Komischerweise wird es vollständig in ein File geschrieben.

Was soll ich noch tun???

Grüße
Jana

Verfasst: 7. Oktober 2004 14:42
von Spring-Daniel
Hm, gute Frage.
Den Fall, dass ein Fehler beim Lesen der Datei auftritt hast Du schon ausgeschlossen, oder? (:

Ansonsten kann ich vielleicht noch den Tip geben, den QSqlCursor zu benutzen und / oder das Beispielprogramm von Trolltech zur Verwendung von Blobs studieren.

http://doc.trolltech.com/3.3/qsqlcursor.html

Beispielprogramm:
http://webcvs.kde.org/cgi-bin/cvsweb.cg ... pp?rev=1.4

Viel Spass noch weiterhin. (: