# JDBC-Fehler "Objekt bereits geschlossen"



## Alex_winf01 (17. Jan 2008)

Ich habe folgendes Problem:

Wenn ich auf die Schaltfläche "Export" klicke, wird eine csv-Datei erstellt mit den entsprechenden Werten aus der DB (über Select ausgewählt).

Der Action Handler sieht wie folgt aus:


```
/*--------------------------------------------------------------*/
		/* Schaltfläche "Export"*/
		/*--------------------------------------------------------------*/
		class exportListener implements ActionListener
		{
			public void actionPerformed(ActionEvent e)
			{
				patientendaten_leeren();
				doku_leeren();
				
				if (Login.angemeldeter_User.equals("sa"))
				{
					/**Export der Daten in eine csv-Datei**/
					Calendar cal = Calendar.getInstance();
					cal.setTime(new java.util.Date()); // heutiger Tag
					jahr = cal.get(Calendar.YEAR);
					jahr_string = Integer.toString(jahr);
		
					try
					{
						Statement csv_stmt = Login.connection.createStatement();
						String csv_string = "Select Krankenhaus.KH_Plan_Nummer, Krankenhaus.KH_IK_Nummer, Dokumentation.* From Krankenhaus, Dokumentation where Dokumentation.jahr <= " + jahr + " AND Dokumentation.status = 'abgeschlossen' OR status_abgeschlossen_weil = 'Korrekturlieferung'";
						System.out.println(csv_string);
						ResultSet csv_rs = csv_stmt.executeQuery(csv_string);
						
						Statement stmt_update_csv  = Login.connection.createStatement(); // Statement erzeugen
						while (csv_rs.next())
						{
							/** Export-Datei erstellen**/
							Csv export = Csv.getInstance();
							export.setFieldSeparatorWrite(";"); // Trennzeichen in der Export-Datei auf ";" umändern (Standard ist ",")
							export.setFieldDelimiter('\''); 	// Trennungszeichen für die Feldbezeichnung auf "'" setzen
							export.write("export.csv", csv_rs, null);	
						}
									
						
						//csv_stmt.close();
						
						JOptionPane.showMessageDialog(null, "Datei wurde erstellt",
						"Info", JOptionPane.INFORMATION_MESSAGE);
						/** Status auf 'übermittelt' setzen**/
						Update.updateDokumentationsstatus_übermittelt();
					}
					catch(Exception csv_e)
					{
						JOptionPane.showMessageDialog(null, "Es ist ein Fehler beim Export aufgetreten" + csv_e,
						"Export-Fehler", JOptionPane.ERROR_MESSAGE);
					}
						
				}
				else
				{
					JOptionPane.showMessageDialog(null, "Sie sind nicht als Systemadministrator angemeldet",
							"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
				}
				
			}
		}
```

Die Methode updateDokumentationsstatus_übermittelt aus der Klasse Update macht folgendes:


```
public static void updateDokumentationsstatus_übermittelt()
	{
		try
		{
			Statement stmt_updateStatus 		= Login.connection.createStatement();
			String update = "update Dokumentation set status = 'übermittelt' where status = 'abgeschlossen'";
			
			int i =  stmt_updateStatus.executeUpdate(update);
			JOptionPane.showMessageDialog(null, " Daten geändert",
					"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
			//stmt_updateStatus.close(); // Statement schließen
		}
		
		catch(SQLException aendern1)
		{
			JOptionPane.showMessageDialog(null, "Fehler beim Ändern" + aendern1,
					"DB-Meldung", JOptionPane.ERROR_MESSAGE);
		}
	}
```

Nun passiert folgendes:

Die csv-Datei wird zwar erstellt, aber keine Werte reingeschrieben (obwohl es entsprechende DS gibt).

Dann hab ich noch die Fehlermeldung 





> Objekt wurde bereits geschlossen



Was mache ich da falsch?


----------



## DP (17. Jan 2008)

setz dein 

Csv export = Csv.getInstance();

vor die while.

wovon kommt denn die klasse csv?


----------



## Alex_winf01 (17. Jan 2008)

Hallo DP,

ich nutze die H2-Datenbank. Hier mal der Link: www.h2database.com/html/frame.html Und da steht:



> Writing a CSV File from Within a Database
> 
> The built-in function CSVWRITE can be used to create a CSV file from a query. Example:
> 
> ...



Ach ja: Und dein Tip hat teilweise funktioniert. Es sind zumindestens 2 DS drinn, es hätten aber 5 sein müssen.  

Es kommt immer noch die Fehlermeldung, dass das Objekt geschlossen wurde.


----------



## Guest (18. Jan 2008)

Problem erkannt - Problem gelöst.

Ich brauche die ganze while-Schleife nicht. Ohne funzt es.


----------



## DP (18. Jan 2008)

http://www.h2database.com/javadoc/org/h2/tools/Csv.html#r17


----------

