Dados não são salvos no BD se não usar o statement.execute() por que? [RESOLVIDO]

2 respostas
K

Salve pessoal,
Mexendo no meu código vi que no final dos statement.setString e etc, se não tivesse um statement.execute() não salvava. Por que?

public void cadastrarDept(Departamento dept) throws SQLException {
        try {
            abrir(); /*Abre a conexão*/
            String comando = "insert into departamento (id_dept, nome) values (?, ?)";
            this.statment = this.conexao.prepareStatement(comando);
            this.statment.setString(1, dept.getId_dept());
            this.statment.setString(2, dept.getDescricao());
            this.statment.execute(); /* Sem este statement ele não salva no BD */
        } finally {
            this.liberar(); /*Fecha todas as conexão e statement*/
        }
    }

Pelo que sei que o statement.execute() retorna true se o resultado for um ResultSet e false se o primeiro resultado for uma atualização.

Inicialmente quando coloquei na IDE informava: "Atribuir valor de retorno a nova variável". Mas depois some não sei o motivo mas está funcionando! :lol:
Parece que existe alguns outros métodos que serviriam para fazer o que o ele faz mas não tenho conhecimento.

Quem poder me dizer agradeço!

2 Respostas

A

o java não identifica automaticamente se você preencheu todos os parâmetros necessários. Mesmo porque você pode fazer alguma mutreta no seu código e colocar mais de uma vez o mesmo parâmetro. O execute serve para você mandar a instrução SQL pro banco de dados.

BrunoFurtado

Opa,
Se vc n colocar o execute(), o statement não faz a consulta ou insere o registro na base de dados.

Com relação ao retorno, vc tem razão, mas existem outros dois métodos:

  • executeUpdate(): executa uma atualização/inserção/delete no banco
  • executeQuery(): executa uma pesquisa no banco

O método executeQuery(), tem como retorno o ResultSet, contendo as tuplas filtradas pela consulta.

O método execute(), valida se o resultado é do tipo ResultSet ou não.

No teu caso, vc deveria usar o executeUpdate().
O retorno seria um inteiro. No caso de sucesso na execução(1); Para erro(2).

Criado 27 de janeiro de 2012
Ultima resposta 27 de jan. de 2012
Respostas 2
Participantes 3