Problema com o INSER_LAST_ID

3 respostas
U

Ola galera.

Estou com um problema no insert_last_id, tenho duas tabelas onde a chave primaria de uma delas é chave estrangeira na outra.

quando eu ensiro os primeiros dados, insere de boa
quando vou fazer uma nova inserção da o seguinte erro:

Exception in thread "main" java.lang.RuntimeException: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 1
	at Persistencia.inserirDados(Persistencia.java:34)
	at Principal.main(Principal.java:107)
Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
	at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1169)
	at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:693)
	at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:794)
	at Persistencia.inserirDados(Persistencia.java:31)
	... 1 more

como posso resolver isso?
acho que tem q ter um contador para o id, como posso fazer?

veja um trecho do código:

public void inserirDados(Dados d) {
   
    this.sql = "insert into registro (reg_num,reg_hora,reg_data,reg_can1,reg_can2,reg_pla_id) values (?,?,?,?,?,LAST_INSERT_ID())";

    try {
      
      PreparedStatement stmt = this.connection.prepareStatement(this.sql);

      // seta os valores
      stmt.setString(1, d.getNum());
      stmt.setString(2, d.getHora());
      stmt.setString(3, d.getData());
      stmt.setString(4, d.getCanal1());
      stmt.setString(5, d.getCanal2());

      // executa
      stmt.execute();
      stmt.close();
    } catch (SQLException e) {
      throw new RuntimeException(e);
    }
  }

  public void planilha(Planilha p) {

    this.sql = "insert into planilha (pla_end,pla_cid,pla_reg,pla_ano) values (?,?,?,?)";

    try {
      
      PreparedStatement stmt = this.connection.prepareStatement(this.sql);

      // seta os valores
      stmt.setString(1, p.getEndereco());
      stmt.setString(2, p.getCidade());
      stmt.setString(3, p.getRegional());
      stmt.setString(4, p.getAno());

      // executa
      stmt.execute();
      stmt.close();
    } catch (SQLException e) {
      throw new RuntimeException(e);
    }
  }

3 Respostas

U

como posso fazer para executar mais de um comando mysql dentro do método?

por exemplo quero executar o insert e esse aqui tbm: ON DUPLICATE KEY UPDATE reg_pla_id = reg_pla_id +1;

ViniGodoy

Por que você não deixa o seu campo chave como auto-numeração?

U

Vini apenas na tabela planilha que esta com auto-numeração, no meu codigo principal eu primeiramente insiro o cabeçalho da planilha, informações sobre ela que ficara armazenados na tabela planilha no BD, depois vou inserir os valores que contem na planilha na tabela registro, mas pra isso tenho que associar a primary key da planilha com a foreign key no registro.

ai no caso esta dando erro de duplicação ou seja quando eu inseri os primeiros dados foi de boa, a parti do segundo começo da erro pq ele esta pegando o id da tabela anterior que já tinha passado, então no caso tenho que faz tipo um contador para esse last_insert_id.

Criado 25 de janeiro de 2012
Ultima resposta 25 de jan. de 2012
Respostas 3
Participantes 2