Efeito Colateral do Banco de Dados

2 respostas
N

Quando tento incluir um registro com uma ID que já existe no banco, ocorre um erro como é de se esperar.
O problema é que quando clico novamente na opção “Incluir Registro”, não consigo mais inserir nenhum registro nesse banco de dados, seja com ID nova ou não.

public void adicionarRegistro() {
      try { 
         String driver = "org.hsqldb.jdbcDriver"; 
         String url = "jdbc:hsqldb:file:./db/database"; 
         String userId = "sa"; 
         String password = ""; 
         String sqlInsert = "INSERT INTO CLIENTES VALUES (?, ?, ?)"; 
         Class.forName(driver); 
         Connection connection = DriverManager.getConnection(url, userId, password); 
         String id = JOptionPane.showInputDialog(null, "Digite a ID do cliente:", "ID", 3); 
         String nome = JOptionPane.showInputDialog(null, "Digite o NOME do cliente:", "NOME", 3); 
         String fone = JOptionPane.showInputDialog(null, "Digite o TELEFONE do cliente:", "TELEFONE", 3); 
         int idInt = Integer.parseInt(id); 
         String nomeString = nome.toUpperCase(); 
         int foneInt = Integer.parseInt(fone); 
         PreparedStatement pstm = connection.prepareStatement(sqlInsert); 
         pstm.setInt(1, idInt); 
         pstm.setString(2, nomeString); 
         pstm.setInt(3, foneInt); 
         int inseriu = pstm.executeUpdate();
         if(inseriu != 1) { 
            JOptionPane.showMessageDialog(null, "Não foi possível inserir o registro! Verifique os valores inseridos.", "Resultado da inserção do registro", 3);  
         } 
         else { 
            connection.commit();
            modeloTabela.addRow(new Object[] { idInt, nomeString, foneInt } ); 
            JOptionPane.showMessageDialog(null, "Registro inserido com sucesso!", "Resultado da inserção do registro", 1);    
         }
         pstm.close(); 
         connection.close();
      }   // Fim try { 
      catch(ClassNotFoundException cnfe) { 
         cnfe.printStackTrace(); 
         System.out.println(cnfe.toString()); 
      } 
      catch(SQLException sqle) { 
         sqle.printStackTrace();  
         System.out.println(sqle.toString()); 
         JOptionPane.showMessageDialog(null, "Não foi possível inserir o registro! Verifique os valores inseridos.", "Resultado da inserção do registro", 3);  
      }
   }

O método adicionarRegistro() é chamado toda vez que um clique num botão é acionado.

2 Respostas

E

Não está faltando o rollback?

if(inseriu != 1) {
     JOptionPane.showMessageDialog(null, "....", "...", 3); 
     connection.rollback();
}else {
     connection.commit();
     modeloTabela.addRow(new Object[] { idInt, nomeString, foneInt } );
     JOptionPane.showMessageDialog(null, "...", "...", 1);   
}
N

Vou testar. Qualquer novidade volto a perguntar.

Mas o rollback não é para retornar a um ponto anterior a uma operação concluída com sucesso? Nesse caso, trata-se de não poder mais inserir registro após uma operação não concluída de inserção.

Obrigado!

Criado 18 de agosto de 2006
Ultima resposta 18 de ago. de 2006
Respostas 2
Participantes 2