Meu programa Java + HSQLDB possui um método para inserir um novo registro no BD. Esse método é chamado toda vez que há um clique no menu ou botão inserir. Quanto tento inserir um valor para uma chave primária já existente no BD, ocorre obviamente um erro.
Mas o problema consiste no fato de que após a mensagem de erro ser exibida ao usuário, o certo seria o usuário poder inserir novamente um registro após clicar no menu ou botão inserir, e isso não acontece!
O sistema permite inserir registros, desde que não ocorra nenhum erro.
Porém, se alguma coisa sai errada (como o exemplo da chave primária), não se consegue inserir mais nada no BD.
Como resolver? Já me sugeriram colocar um rollback() após o erro, mas não adiantou.
Espero ter explicado bem minha dúvida.
O método para inserir:
public void adicionarRegistro() {
Connection connection;
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 = 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);
connection.rollback();
}
}