Insistindo na dúvida. Porque só salva depois?

2 respostas
N

Esse é o código. Porém, os dados só são salvos no banco de dados após eu reiniciar o programa. Porque isso?

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);  
        } 
  }

2 Respostas

M

De um commita assim:

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);   
           }

           connection.commit();   //COMMIT PARA CONFIRMAR A OPERAÇÃO
           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); 
        }
  }
D

Tenta fechar o seu PreparedStatement (método close), ou entao da um flush nele… Ai rola.

Criado 17 de julho de 2006
Ultima resposta 17 de jul. de 2006
Respostas 2
Participantes 3