# Statemend Fehler



## Manuela (19. Sep 2008)

Hallo ich habe ein problem mit meinem Server programm

ich schicke über sockets ein String[] das kommt auch ohne zu murren an

dann mache ich folgendes


```
String[] wert = (String[]) in.readObject();

Statement st_1 = con.createStatement();

for(int i =0 ; i < wert.length;i++){
    st_1.execute(wert[i]);
}
```

und anschliessend steigt das programm aus.

was kann ich ändern das programm durchläuft?

PS .: anschliessend muß ich die Mysql datenbank neu starten

Gruß Manuela


----------



## Guest (19. Sep 2008)

Manuela hat gesagt.:
			
		

> und anschliessend steigt das programm aus.



Wie steigt es genau?


----------



## Manuela (20. Sep 2008)

Hallo,
Die Datenbank schmiert ab.

und es kommt die Fehlermeldung :


SQLException: Look wait timeout exceeded; try restarting transaction

anschliessend muß ich die Datenbank in den Diensten neu Starten dann geht es einmal und dann anschliessend
kommt der gleiche Fehler wieder.

Gruß manuela


----------



## Guest (20. Sep 2008)

Was für Statements setzt du da ab? DROP DATABASE oder sowas?


----------



## Manuela (20. Sep 2008)

Hallo ,

Insert und update und delete SQL Strings

gruß Manuela


----------



## maki (20. Sep 2008)

Was für eine Datenbank?



> SQLException: Look wait timeout exceeded; try restarting transaction


Sollte wohl heissen


> SQLException: Lo*c*k wait timeout exceeded; try restarting transaction


Sieht so  aus als ob der Timeout für eine Transaktion überschritten wird.

Wie lange dauert es denn bis die Exception eintritt?


----------



## Manuela (20. Sep 2008)

Hallo 

es ist ein MySQL Datenbank

Gruß Manuela


----------



## Manuela (21. Sep 2008)

Hallo Leute ich habe das Problem gefunden ????


Aber wie Kann ich das Abstellen????

Das Problem ist folgendes 
ich schicke dem Server ein  ObjectOutputStream soweit so gut 
nach dem ich einige änderungen am meinem Datensatz gemacht habe 
will ich dem Server wieder ein ObjectOutputStream schicken und dann kracht es.

das Problem ist das wenn ich das ObjectOutputStream schliesse (close()) wird auch der socket geschlossen denn
ich brauche.

jetzt kommt die Frage wie kann ich denOutputStream schliessen ohne den Socket zu beenden.

denn wenn der Socket beendet ist komme ich nicht mehr an den Server ram.

und irgendwie geht dann die Datenbank kaputt (und es kommt zur Timeout ..).





```
public void updatenAtu(String[] insert, String stat, String auftnr, String akt, int vor, int Leih, String tag) throws IOException{
       
    ObjectOutputStream os=null;
            SQL.pt.println("updatenAtu");          
             os = new ObjectOutputStream(SQL.socket.getOutputStream());
            upda af = new upda();
            af.setInsert(insert);
            af.setStat(stat);
            af.setAuftnr(auftnr);
            af.setAkt(akt);
            af.setVor(vor);
            af.setLeih(Leih);
            af.setDatum(tag);
            af.setStat_neu(MainFrame.instance().get_stat()); 
            
            os.writeObject(af);
  
          // wenn ich hier os.close() mache dann schliesse ich auch den socket und das darf ich nicht.
      
    }
```


Gruß Manuela


----------



## maki (21. Sep 2008)

Nochmal langsam...

Du schickst Daten an eine MySQL DB per Socket???


----------



## manuela (21. Sep 2008)

hallo,

nein ich schicke daten an einen Server und der verarbeitet diese dann 
an der Mysql datenbank

Gruß Manuela


----------



## manuela (22. Sep 2008)

Hallo Leute Keine eine Idee was ich machen könnte damit das funkioniert.


ich kann ja nicht immer die mysql neu starten damit ich weitermachen kann.

Gruß Manuela


----------



## SlaterB (23. Sep 2008)

verwende eben das close() nicht,
es ist noch nicht wirklich klar, wie das mit deinem Problem zusammenhängt,

den normalen Socket-Stream sowohl als ObjectOutputStream und vielleicht noch vorher + hinterher anders zu verwenden halte ich für gewagt,

vielleicht sortierter:
verwende einen ObjectOutputStream mit einem ByteArrayOutputStream und erhalte so beim Client aus dem Objekt erstmal nur ein byte[],
dann sende in den Socket ein Start-Signal, das byte[] + ein Ende-Signal

der Server liest den Socket normal, allerdings auf byte-Ebene,
weder als Objekt noch als String interpretiert,
kann mit Hilfe der oben erwähnten Signale das byte[] für das Objekt herausfiltern,
und dieses dann an die DB weiterleiten oder einen ByteArrayIputStream + ObjectInputStream aufmachen oder was auch immer,

jedenfalls sollte die DB nichts direkt mit den Streams des Sockets zu tun haben


----------

