# Datenbank problem siehe Text



## manuela (18. Okt 2008)

Hallo alle zusammen.



Der Titel darf aus Spamschutzgründen nicht 'Mysql Probleme mit rollback' sein !
Tolle sache was zu ärklären wenn mann wichtige Worte nicht benutzen darf!!!

ich habe ein riesen problem mit Mysql 5.1.28-rc-community via TCP/IP.

wenn ich eine Procedure oder andere Statements (Insert , update ) mache 
bekomme ich immer einen Fehler geliefert Error Code 1305 und das die Procedure nicht geben würde.

zum besseren Verstehen ein wenig Code

bei diesem Code bekomme ich die Fehlermeldung 

```
public boolean insert_sql_string(String insert) throws SQLException {
       Connector  con = Connector.getInstance();
         Connection   c = con.getConnection();
        c.setAutoCommit(false);
        Statement st = c.createStatement();       
        boolean wert = false;
        try {
            st.execute(insert);
              c.commit();
             c.setAutoCommit(true);
             st.close();
            wert = true;
        } catch (SQLException aa) {
              c.rollback();
              c.setAutoCommit(true);
            wert = false;       
        }
        return wert;
    }
```

und dieser code funktioniert was soll der Mist wenn man kein 
rollback machen kann wenn es eine Exception gibt.

```
public boolean insert_sql_string(String insert) throws SQLException {
       Connector  con = Connector.getInstance();
         Connection   c = con.getConnection();
        Statement st = c.createStatement();       
        boolean wert = false;
        try {
            st.execute(insert);
             st.close();
            wert = true;
        } catch (SQLException aa) {
            wert = false;       
        }
        return wert;
    }
```

Gruß Manuela


----------



## Guest (19. Okt 2008)

manuela hat gesagt.:
			
		

> was soll der Mist



Schlechter Stil.


----------



## pinhead84 (19. Okt 2008)

Der MySQL-Treiber muss nicht zwangsläufig alle JDBC-Operationen implementieren. Unter Umständen kann ein Update des Treibers dein Problem lösen.

Ich habe schon lange nichts mehr mit MySQL gemacht. Als ich damals damit gearbeitet habe, hat MySQL sich mit Transaktionen noch recht schwer getan. Welche Tabellen-Engine verwendest du? - Nicht jede unterstützt Transaktionen. Laut Doku funktioniert dies wohl nur mit InnoDb-Tabellen.


----------



## maki (19. Okt 2008)

>> Nicht jede unterstützt Transaktionen. Laut Doku funktioniert dies wohl nur mit InnoDb-Tabellen.

Wo steht das?


----------



## pinhead84 (19. Okt 2008)

maki hat gesagt.:
			
		

> Wo steht das?



Siehe: http://dev.mysql.com/doc/refman/5.1/de/ansi-diff-transactions.html



> Die Versionen 3.23-max und alle Versionen ab 4.0 von MySQL Server unterstützen Transaktionen mit transaktionalen InnoDB- und BDB-Speicher-Engines. InnoDB bietet vollständige  ACID-Konformität. Siehe auch Kapitel 14, Speicher-Engines und Tabellentypen. Informationen zu InnoDB-spezifischen Unterschieden zu Standard-SQL bezüglich der Behandlung von Transaktionsfehlern finden Sie in Abschnitt 14.2.15, „InnoDB-Fehlerbehandlung“.
> 
> Die anderen *nichttransaktionalen* Speicher-Engines in MySQL Server (wie etwa MyISAM) folgen einem anderen Muster der Datenintegrität, welches „atomare Operationen“ genannt wird. Aus transaktionaler Sicht arbeiten MyISAM-Tabellen quasi immer im Modus AUTOCOMMIT=1. Atomare Operationen bieten häufig vergleichbare Integrität bei besserer Leistung.



Wenn MyISAM-Tabellen immer mit AUTOCOMMIT=1 arbeiten, gibts meiner Meinung nach auch kein Rollback auf diesen Tabellenarten und der JDBC-Treiber könnte einen Fehler liefern, wie manuela ihn beschrieben hat.



			
				manuela hat gesagt.:
			
		

> wenn ich eine Procedure oder andere Statements (Insert , update ) mache
> bekomme ich immer einen Fehler geliefert Error Code 1305 und das die Procedure nicht geben würde.


----------



## manuela (19. Okt 2008)

Hallo,

also ich habe in der Datenbank InnoDB die unterstützen auf alle fälle Autocommit

aber die liste der Fehler geht weiter 


```
ein ganz normale Statement 
 stmt.execute("Delete from eintraege where e_la_nr=2344");
wirft 
eine 


SCHWERWIEGEND: null
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
        at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:734)
```
langsam bekomme ich einen richtigen Hals aber unser Chef will kein Geld ausgeben für eine Datenbank.

ich bin am verzweifeln.

gruß manuela


----------



## manuela (19. Okt 2008)

Hallo ,
habe problem gelöst 

habe mit dem "DB_monitor" das problem gefunden.  
ja wenn man den AutoCommit deaktiviert sollte man immer darauf achten das man diesen auch wieder schließt.

Gruß Manuela :lol:


----------

