public void cadastrarCliente() {
try {
String driver = "org.hsqldb.jdbcDriver";
String url = "jdbc:hsqldb:file:./db/CLIENTES";
String userId = "sa";
String password = "";
String sqlSelect = "SELECT * FROM CLIENTES";
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 {
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();
}
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);
}
}
Mesmo quando a inserção do novo registro é realizada com sucesso, os novos valores não aparecem no arquivo .script do banco de dados hsqldb.
SÓ QUANDO EU REINICIO O PROGRAMA, é que é atualizado o banco de dados. Porque isso?
Outra coisa: Porque quando o resultado do PreparedStatement.execute() é != 1 a mensagem de erro que eu coloquei em seguida não é exibida? Somente aparece a mensagem de erro colocada dentro do catch(SQLException sqle).