Datenbankenproblem (Clob) mit Qt

Alles rund um die Programmierung mit Qt
Antworten
kleineSchildy
Beiträge: 76
Registriert: 16. September 2004 18:29
Wohnort: Dresden

Datenbankenproblem (Clob) mit Qt

Beitrag 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
Spring-Daniel
Beiträge: 40
Registriert: 4. Oktober 2004 16:26

Beitrag 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
kleineSchildy
Beiträge: 76
Registriert: 16. September 2004 18:29
Wohnort: Dresden

Beitrag 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
kleineSchildy
Beiträge: 76
Registriert: 16. September 2004 18:29
Wohnort: Dresden

Beitrag 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
Spring-Daniel
Beiträge: 40
Registriert: 4. Oktober 2004 16:26

Beitrag 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. (:
Antworten