# Statement.getGeneratedKeys() funktioniert nicht



## Spontex (15. Sep 2004)

Hallo,

also ich habe folgendes Problem: Nachdem ich einen neuen Datensatz in eine Tabelle der Datenbank hinzugefügt habe würde ich gerne den dafür von der DB erstellen Schlüssel erfahren. Also habe ich folgendes gemacht:


```
public int insert ( String sqlQuery ) {
		ResultSet oResult;
		try {
			oState = oConn.createStatement();
			oState.executeUpdate( sqlQuery );
			oResult = oState.getGeneratedKeys();
			return oResult.getInt("GENERATED_KEYS");
		}
		catch( SQLException e ) {
			e.printStackTrace();
			return -1;
		}
	}
```

Das von der Methode getGeneratedKeys(); enthält zwar eine Spalte Namens "GENERATED_KEYS" aber dort ist leider kein Wert enthalten. Und mein Primärschlüssel würde per auto_increment auch erstellt (hab mal nachgeschaut). Irgerendwie verschliesst sich mir was da falsch sein könnte.

Ab JDK 1.4 kennt Java die Methode getGeneratedKeys() (http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Statement.html#getGeneratedKeys()) und MySQl inkl. Connector sollten das eigentlich auch können (http://www.mysql.de/products/connector/j/)

Java: 1.4.2
Datenbank:  MySql 4.1.3
J-Connector: 3.0.14

Grüsse


----------



## Bleiglanz (15. Sep 2004)

kann so doch eh nicht funktionieren?

was ist mit oResult.next()?


----------



## Guest (15. Sep 2004)

Ist mir auch gerade aufgefallen, manchmal sieht man den Wald vor lauter Bäumen nicht oder wie war das??  :wink: 


```
public int insert ( String sqlQuery ) {
		ResultSet oResult;
		try {
			oState = oConn.createStatement();
			oState.executeUpdate( sqlQuery, Statement.RETURN_GENERATED_KEYS );
			oResult = oState.getGeneratedKeys();
			if (oResult.next()) {
				return oResult.getInt(1);
			}
			else {
				return -1;
			}
		}
		catch( SQLException e ) {
			e.printStackTrace();
			return -1;
		}
	}
```


----------



## murkser (23. Mai 2005)

Hallo,

ich habe folgenden Code:


```
java.sql.Statement stmt = dbConnection.createStatement();
        stmt.executeUpdate( sql ,Statement.RETURN_GENERATED_KEYS );
        ResultSet rs = stmt.getGeneratedKeys();
        if (rs.next()) System.out.println("id:"+rs.getInt(1));
        stmt.close();
```

damit bekomme ich immer folgenden Fehler in der Zeile mit dem executeUpdate():


> java.lang.AbstractMethodError: org.gjt.mm.mysql.jdbc2.Statement.execute(Ljava/lang/String;I)Z


Das SQL ist ein Insert und funtkioniert. Lasse ich die Rückgabe der ID weg, funtkioniert der insert, nur das RETURN_GENERATED_KEYS funktioniert irgendwie nicht.

Hat jemand ne Idee, was das problem sein könnte?[/quote]


----------



## Bleiglanz (23. Mai 2005)

lies mal die doku zum treiber (oder besorg dir den Quelltext)

=> die Methode wird nicht immer unterstützt....


----------

