MySQL unter Java: Id (auto_increment) Rückgabe nach INSERT Befehl

marcel_m

Mitglied
Hallo zusammen,

über Java schicke ich ein SQL Statement an den MySQL Server und füge mit INSERT einen neuen Datensatz hinzu. Dabei wird automatisch der Wert des Primärschlüssels "Id" hochgesetzt. Wie erhalte ich jetzt aber diesen Wert?
Hinweis: Ich könnte zwar einfach danach noch ein Statement ausführen, das mir die Id vom letzten Datensatz zurückgibt, aber ich muss ausschließen können, dass nicht in dieser (zwar geringen aber dennoch vorhandenen) Zwischenzeit jemand anders einen neuen Datensatz einfügt und ich die Id von einem ganz anderen Datensatz bekomme...

Weiß jemand Hilfe?

Vielen dank schon mal im voraus,

Marcel
 
Hallo,

es gibt von MySQL einen Befehl, der dir die letzte eingefügte ID zurückgibt. Ich weiß leider nicht mehr wie dieser heißt. So kommst du auf jedenfall an die ID ran. Sonst wüsste ich ohne OR-Mapping-Framework keine andere Möglichkeit.

MFG

zEriX
 
Hallo,

schau mal hier:
SQL:
mysql> use test;
Database changed
mysql> create table example(id int not null auto_increment, data varchar(32), primary key(id));
Query OK, 0 rows affected (0.14 sec)

mysql> select * from example;
+----+------+
| id | data |
+----+------+
|  1 | bubu |
|  2 | bubu |
|  3 | bubu |
+----+------+
3 rows in set (0.00 sec)

mysql>

Java:
/**
 * 
 */
package de.tutorials;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

/**
 * @author Thomas.Darimont
 * 
 */
public class JDBCAutoGenerateKeysExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setServerName("localhost");
        dataSource.setUser("root");
        dataSource.setPassword("xxx");
        dataSource.setDatabaseName("test");
        dataSource.setPort(3306);
        
        Connection connection = dataSource.getConnection();
        Statement statement = connection.createStatement(
                Statement.CLOSE_ALL_RESULTS, Statement.RETURN_GENERATED_KEYS);
        
        statement.execute("insert into example (data) values ('bubu')");
        
        ResultSet generatedKeys = statement.getGeneratedKeys();
        if(generatedKeys.next()){
            System.out.println(generatedKeys.getInt(1));    
        }

        statement.close();
        connection.close();
    }

}

Gruß Tom
 
Zurück