prepared statements in groovy

turmaline

Bekanntes Mitglied
Hallo Leute,

mal zwangsläufig muss ich groovy kennenlernen. Das Aufgabe ist dabei Dateien aus einer Datenbank zu exportieren. Dabei wurde die Anfrage in zwei Teile getrennt. Im ersten Teil der Anfrage (query_documents) werden zunächst einmal allgemeine Daten abgefragt und daraus filename erstellt. Dann wird es im oldDocHome geschaut, ob eine Datei mit diesem Namen bereits existiert. Wenn ja, dann wird diese Datei einfach in docHome kopiert (statt sie aus der Datenbank zu exportieren). Wenn nicht, wird blob_data (query_blob) abgefragt und die Datei aus der Datenbank exportiert.

Es funktioniert leider nicht((( Und da ich mich mit Syntax so gut wie gar nicht auskenne, sehe ich meine Fehler nicht. Bei Ausführung bekomme ich:
No such property: blobref_id

Java:
String query_documents = """SELECT a.id id, a.version version, e.language language, e.name name, e.blobref_id blobref_id 
		FROM ${tableuser}.attachment_entry e, ${tableuser}.attachment_entries ae, ${tableuser}.attachment a, ${tableuser}.attachment_blob b
		WHERE e.id = ae.attachment_entry_id AND a.id = ae.attachment_id AND e.blobref_id = b.id AND a.id > 3000 AND a.id < 3011"""
    logger.debug("About to query: $query_documents")
	sql.withStatement { stmt -> 
		//stmt.fetchSize = 10
		//stmt.maxFieldSize = 30000000
		//logger.debug("fetchSize=${stmt.fetchSize}, maxFieldSize=${stmt.maxFieldSize}")
	}
	sql.eachRow(query_documents) {
		String lang = it.LANGUAGE != null ? it.LANGUAGE : "null"
		String ext = getExtension(it.NAME)
		String filename = "${it.ID}.${it.VERSION}.${lang}.${ext}"
			
		// look for filename in olddata dir
		File thisFile = new File ("$oldDocHome/$module", filename)
		// if it exists copy it
		if (thisFile.exists()) {
			try {
		        FileUtils.copyFile(thisFile, new File ("$docHome/$module", thisFile.getName ()));
		        //logger.debug("Copying of " + fileName)
		    } catch (IOException e) {
		        e.printStackTrace();
		    }
		} 
		else {
			String query_blob = "SELECT blob_data from ${tableuser}.attachment_blob WHERE blobref_id = :id"
			sql.eachRow(query_blob, [id: blobref_id]) { row ->
			writeBlob(filename, row.getBinaryStream("BLOB_DATA"), module)}
		} 
		
	} // for each row in query_documents

Kann mir jemand helfen?

Gruß, madlena
 
B

bygones

Gast
hab leider in groovy noch kein sql gemacht, aber
[groovy]sql.eachRow(query_blob, [id: blobref_id]) { row ->[/groovy]
hier verwendest du die blobref_id Variable, die aber nirgends definiert wurde, daher findet er sie auch nicht
 

turmaline

Bekanntes Mitglied
hier verwendest du die blobref_id Variable, die aber nirgends definiert wurde, daher findet er sie auch nicht

doch die lasse ich mir von der ersten anfrage liefern. syntak war etwas falsch. so funktioniert es!

[groovy]
String query_blob = "SELECT blob_data from ${tableuser}.attachment_blob WHERE id = ?"
sql.eachRow(query_blob, [it.blobref_id]) { row ->
[/groovy]

bei der ausführung der query_blob-anfrage, wird ein argument übergeben, das wert für welches aus der ersten anfrage stammt.
 
B

bygones

Gast
passts jetzt ? zwischen [c]blobref_id[/c] und [c]it.blobref_id[/c] ist ja n ordentlicher Unterschied
 

Ähnliche Java Themen

Neue Themen


Oben