# Bei Anfrage "MySQLNonTransientConnectionException"



## nickname (27. Feb 2011)

hi,

vllt hat jemand von euch Idee.

Mein Prob.:
1. Stelle Verbindung zur DB auf (klappt)
2. Rufe einen Datensatz auf, der dann in 4 TextField's erscheint (klappt)
3. Lösche Datensatz aus den TextField's (klappt)
4. Trenne Verbindung zur DB (klappt)
5. Stelle Verbindung wieder zur DB her (klappt)
6. Rufe erneut Datesatz auf klappt nicht mehr
Folgende Exception taucht dann auf
"com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.".
hab aber doch wieder eine Verbindung aufgebaut, denn das nachfolgende funktioniert

1. Stelle Verbindung zur DB auf (klappt)
2. Datensatz in DB eintragen (klappt)
3. Verbindung zur DB trennen (klappt)
4. Stelle Verbindung zur DB auf (klappt)
5. Datensatz erneut eintragen (klappt)
hier habe ich keine Probleme. (Der Datensatz ist im Mom. immer der selbe, also als Variable gespeichert)

Das beschäftigt mich schon seit gestern.

Ich wollte nicht den gesammten Code einstellen, wäre echt zu viel.

Wäre für jeden Tipp dankbar.

gruß nickname


----------



## nickname (27. Feb 2011)

hi,

villt kann das helfen, was ich herausgefunden habe:

1. Stelle Verbindung zur DB auf (klappt) (button)
2. Rufe einen Datensatz auf, der dann in 4 TextField's erscheint (klappt)(button)

und jetzt klicke ich nocheinmal
1. Stelle Verbindung zur DB auf (klappt)(button)
2. Trenne Verbindung zur DB (klappt)
3. Rufe einen Datensatz auf, der dann in 4 TextField's erscheint (klappt)(button)
4. Trenne Verbindung zur DB (klappt)
5. Rufe einen Datensatz auf, der dann in 4 TextField's erscheint (klappt)(button)
usw. 
Obwohl ich die Verbindung unterbrochen habe, kann ich dennoch ohne, dass ein
Exception auftaucht, den Datensatz immer aufrufen:shock:

Aber gehe ich vor, wie im ersten thread von mir, bekomme ich eine Exception.

Ach so, wenn ich die Verbindung zur DB getrennt habe, kann ich auch keine Daten mehr
in der DB speichern aber trotzdem noch Daten aufrufen.

Danke, nickname


----------



## Wyvern (28. Feb 2011)

Hab den selben Fehler derzeit, und eine (mögliche) Lösung gefunden. Konnte sie noch nicht testen.

Guckst Du hier


----------



## nickname (28. Feb 2011)

Hi, danke für den Link aber es ist nicht so, dass ich keine Verbindung aufbauen kann. Es ist
so, dass ich erst beim zweiten klick auf "Verbinden" ohne Prob. meine Daten speichern kann.

Ich probiere gerade aus alles in einer Klasse unterzubringen. Vielleicht ist es ja so, dass ich einfach nur
mit den ganzen Objekten Probleme habe. Das ist noch so ein kleines Verständnisprob. bei mir.???:L

Wenn es klappt, werde ich mich dann wieder melden

gruß nickname


----------



## nickname (1. Mrz 2011)

Hab es hinbekommen  vllt interessiert es ja noch jemanden...

So sah der Code vorher aus (alles in einer Klasse)

```
HauptKlasse
....
String firstName;
String secondName;
int preselection;
int fonnumber;
...

String befehlEinfügen = "INSERT INTO telefon (name,vorname,vorwahl,telefonnummer)" +
				"VALUES(" + "'" + firstName + "','" + secondName + "','" + preselection + "','" + fonnumber + "')";
...
```


```
public void datenSpeichernInDatenbank(){
			try{		
				stat = conn.createStatement();
				
				firstName = textField[0].getText();
				secondName = textField[1].getText();
				preselection = Integer.parseInt(textField[2].getText());
				fonnumber = Integer.parseInt(textField[3].getText());
				
				stat.executeUpdate((befehlEinfügen));
				}
			catch(SQLException sql){
				System.out.println("Daten können nicht eingefügt werden: " + sql);
			}
		}
		}
```
Nach dem Eintrag der Daten in die TextField´s sollten dann diese in der DB gespeichert werden aber
das klappte nicht.

Mit dieser Variante klappt es ohne Porb.

```
public void datenSpeichernInDatenbank(){
			try{	
				stat = conn.createStatement();
				
				firstName = textField[0].getText();
				secondName = textField[1].getText();
				preselection = Integer.parseInt(textField[2].getText());
				fonnumber = Integer.parseInt(textField[3].getText());
				
//Nur dieser Teil, der vorher nicht in dieser Methode enthalten war, wurde hier eingefügt
				String befehlEinfügen = "INSERT INTO telefon (name,vorname,vorwahl,telefonnummer)" +
				"VALUES(" + "'" + firstName + "','" + secondName + "','" + preselection + "','" + fonnumber + "')";
				
				stat.executeUpdate((befehlEinfügen));
				
				System.out.println(firstName + "   !!! Daten erfolgreich eingefügt !!!");
				}
			catch(SQLException sql){
				System.out.println("Daten können nicht eingefügt werden: " + sql);
			}
}
		}
```
Aber daraus ergibt sich für mich eine neue Frage.
Warum klappte das nicht vorher?? Die daten aus dem TextField´s werden doch eh in den 4 Varablen,
die dann von der Variable "String befehlEinfügen" übernommen werden, gespeichert!? Oder nicht??

Vllt. hat jemand ja eine Erklärung für mich, wäre echt nett

gruß nickname


----------



## Wyvern (22. Mrz 2011)

Ist der String befehlEinfügen denn eine Membervariable der Hauptklasse? Wenn ja, dann frag ich mich wie das dort überhaupt je funktionieren konnte. Vielleicht fehlt mir zu viel aus der Hauptklasse, das es erklären würde, aber zum Zeitpunkt der Erstellung dieser Variablen sind die darin enthaltenen Variablen null oder zumindest nicht definiert. Das hätte ja dort schon ordendlich knallen müssen, oder nicht? 
Ich hab leider auch immer noch diesen Fehler, und kann ihn nicht mal eingrenzen wo er auftritt. Das sind immer unterschiedliche Stellen. Aber auch bei mir gehen die Zugriffe oft erst beim zweiten Mal


----------

