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!!
luxu
Maio 7, 2011, 5:31am
#2
pra evitar SQLInjection use o preparedStatement…
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…
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…