Pegar ultimo id auto_increment inserido na base [RESOLVIDO]

Pessoal,

Estou fazendo uma inserção assim:

statement.executeUpdate(meucomandoSQLaqui);

e quando vou pegar o que eu inseri dessa forma:

			ResultSet inserido = statement.getGeneratedKeys();

Dá esse erro:

java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

Até já tentei colocar esse Statement.RETURN_GENERATED_KEYS depois do comando mas continua o erro.
Alguém sabe como corrigir isso? O ID e autoincrement e preciso pegar o ID que foi criado assim que eu inserir pra poder fazer referencia em uma FK.
Não quero usar comandos que pega última tupla inserida porque pode ser que não seja o que eu inseri, imaginando acessos e gravações concorrentes.

Alguém me ajuda nisso por Deus, nao acho solução!!

pra evitar SQLInjection use o preparedStatement…

qual banco ?

Bom dia!
Pelo que eu li na documentação vc pode usar o método:

Connection.prepareStatement(seuSqlAqui, Statement.RETURN_GENERATED_KEYS);

ou foi isso que vc fez e não deu certo?

a documentação diz que o driver jdbc pode não suportar essa operação, mas se for esse o caso vc deveria receber uma exceção diferente.

[quote=FieroddPJ]Bom dia!
Pelo que eu li na documentação vc pode usar o método:

Connection.prepareStatement(seuSqlAqui, Statement.RETURN_GENERATED_KEYS);

ou foi isso que vc fez e não deu certo?

a documentação diz que o driver jdbc pode não suportar essa operação, mas se for esse o caso vc deveria receber uma exceção diferente.[/quote]

Sim ja fiz isso tbem e nao deu…

mysql

Bom dia!

Dá uma olhada, fiz o seguinte teste aqui e funcionou eu consigo obter o id gerado sem problemas
To usando o mysql-server-5.1.49 e o driver 5.1.16

Veja se algo está diferente e posta ai pra gente!

	public static void main(String[] args) throws SQLException, ClassNotFoundException {
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mca", "root", "root");
		PreparedStatement pst = conn.prepareStatement("INSERT INTO TESTE (NOME) VALUES (?)", Statement.RETURN_GENERATED_KEYS);
		pst.setString(1, "FIERODD");
		pst.executeUpdate();
		ResultSet rs = pst.getGeneratedKeys();
		int id = 0;
		if(rs.next()){
			id = rs.getInt(1);
		}		
		System.out.println("Id gerado pelo insert foi " + id);		
	}	
1 curtida

[quote=FieroddPJ]Bom dia!

Dá uma olhada, fiz o seguinte teste aqui e funcionou eu consigo obter o id gerado sem problemas
To usando o mysql-server-5.1.49 e o driver 5.1.16

Veja se algo está diferente e posta ai pra gente!

	public static void main(String[] args) throws SQLException, ClassNotFoundException {
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mca", "root", "root");
		PreparedStatement pst = conn.prepareStatement("INSERT INTO TESTE (NOME) VALUES (?)", Statement.RETURN_GENERATED_KEYS);
		pst.setString(1, "FIERODD");
		pst.executeUpdate();
		ResultSet rs = pst.getGeneratedKeys();
		int id = 0;
		if(rs.next()){
			id = rs.getInt(1);
		}		
		System.out.println("Id gerado pelo insert foi " + id);		
	}	

[/quote]

Olha apaguei o método inteiro e escrevi de novo dessa forma e deu certo! Sinceramente não sei o que aconteceu!
Valew!!!

Valeu pela dica, me ajudou aqui tbm…