# Fehlermeldung "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?


----------



## SlaterB (17. Jan 2008)

was ist Csv?
was macht write()?
kannst du prüfen, ob dort das ResultSet durchlaufen wird?
fehlt vielleicht nur am Ende ein flush/ close auf dem Stream?

wo genau tritt denn die Exception auf? welche Code-Zeile? was für Exception ist das? am besten ganzer StackTrace,
wozu erzeugst du stmt_update_csv?


----------



## Alex_winf01 (17. Jan 2008)

Also, ich verwende die H2-Datenbank und den Export aus der Datenbank erfolgt über die Klasse CSV. Hier ist der Link dazu:

www.h2database.com/html/frame.html

Die csv-Datei wird ja erstellt, aber ohne Werte, da das Objekt vorher geschlossen wurde. Die updateDokumentationsstatus_übermittelt()  wird durchgeführt, wenn ich nämlich in die DB über die Weboberfläche schaue, ist die entsprechende Spalte geändert.


----------



## L-ectron-X (18. Jan 2008)

Warum lässt du die Leute "an mehreren Fronten kämpfen"?
*geschlossen*

Weitere Konversation bitte hier: http://www.java-forum.org/de/viewtopic.php?t=62554


----------

