Não consigo executar um "INSERT"

7 respostas
N

Desculpem pela minha insistência, mas se eu não conseguir resolver esse problema, não vou poder dar prosseguimento aos meus estudos em JAVA / JDBC / SQL.

Alguém, com código semelhante a esse, consegue INSERIR um novo registro numa tabela?
Preciso descobrir onde estou errando, pois, como já escrevi antes, enquanto isso não acontece não posso continuar com os estudos em Java.

Agradeço a compreensão e espero que me perdoem pela insistência.

Está aqui o código, que apesar de “aparentemente” não dar erro, não insere um registro no meu bd, como era de se esperar.

// configurações iniciais. 
static String driver = "org.hsqldb.jdbcDriver"; 
static String url = "jdbc:hsqldb:file:./db/CLIENTES"; 
static String userId = "sa"; 
static String password = ""; 
Vector columnNames = new Vector(); 
Vector data = new Vector(); 
static String sqlInsert = "INSERT INTO CLIENTES(id_cliente, nome_cliente, telefone_cliente) VALUES(?, ?, ?)"; 

// método para cadastrar novo cliente. 

public void cadastrarCliente() { 
   try { 
      Class.forName(driver); 
      Connection connection = DriverManager.getConnection(url, userId, password); 
      PreparedStatement pstmt = connection.prepareStatement(sqlInsert); 
      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); 
      pstmt.setInt(1, Integer.parseInt(id)); 
      pstmt.setString(2, nome.toUpperCase()); 
      pstmt.setInt(3, Integer.parseInt(fone)); 
      pstmt.executeUpdate(); 
      connection.close(); 
      pstmt.close(); 
   } 
   catch(ClassNotFoundException cnfe) { 
   cnfe.printStackTrace(); 
   } 
   catch(SQLException sqle) { 
   sqle.printStackTrace();  
} 
}

7 Respostas

F

Tentou dar um commit antes do close?

N

Não, eu não efetuei um COMMIT antes do comando close();
É obrigatório usar COMMIT nesse caso, ou é apenas uma sugestão?
E como seria esse método? Quem invoca o COMMIT? O PreparedStatement?
Agradeço pela ajuda.

F

Meu… te aconselho a usar commit…

Testei rapido aqui, fazendo um insert em um postgres, nao dei commit e chamei
close direto e funcionou o insert… achei estranho pois achava que ele iria dar um rollback…

Mas em todo caso inclui ai e faz esse teste…

connection.commit();
connection.close();
T

Hum dá uma olhada nesse trecho de código e ve se te ajuda ai blz..

Eh um trecho de codigo (funcionando) de um cadastro de produtos..

public int insereProduto(Produto produto) {
       
        int inseriu;
       
        if(produto != null) {
            inseriu = produto.getCodigo();
           
            PreparedStatement pstmt;
               
            try {
               
                pstmt = conn.prepareStatement("insert into produto(codigo, nome, descricao) values (?, ?, ?)");
               
                pstmt.setInt(1,produto.getCodigo());
                pstmt.setString(2,produto.getNome());
                pstmt.setString(3,produto.getDescricao());
               
                pstmt.execute();
   
                pstmt.close();
            } catch (SQLException e) {
                inseriu = -1;
                e.printStackTrace();
            }
        } else {
            inseriu = -1;
        }
       
        return inseriu;
       
    }

Valew...

N

Ainda continua sem funcionar.
Tentei commit() mas não deu jeito.
O que pode estar errado?

R

Oi NewbieJava!
Será que dava pra vc informar que mensagem de erro está retornando? E outra coisa, o driver de conexão foi digitado corretamente? a url de conexão é isso mesmo?

Abraço…

N

Obrigado Rodney. Não aparecia mensagem de erro. Mas parece que foi corrigido o problema fazendo um teste no executeUpdate(). Pelo menos é o que parece. Agora, o problema é que não está atualizando o banco em tempo real, como citei no meu último post.
Obrigado.

Criado 10 de julho de 2006
Ultima resposta 14 de jul. de 2006
Respostas 7
Participantes 4