Executando Procedure no Postgres

Falae, galera.

Criei uma procedure no postgres para inserir dados.
Eu consigo executa-la via postgres usando o comando: select nome_procedure();

agora na minha aplicação java, como faria?

Agradeço a atenção.

Abraço!

Segue abaixo link para o tutorial de JDBC da Sun mostrando como chamar stored procedures:

http://java.sun.com/docs/books/tutorial/jdbc/basics/sql.html

Falae, Roger.
Obrigado pela atenção.

Dei uma lida e continuo sem conseguir, vou colocar o codigo do meu metodo procedure de teste.

   public void procedure(Evento ev){
          CallableStatement proc = null;
        try {
            proc = getConexao().prepareCall("{ call sp_ins_ev(?,?,?,?,?,?,?) }");
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
          try{
          proc.setInt(1, ev.getCodigo());
          proc.setString(2, ev.getNomelocal());
          proc.setString(3, ev.getEndereco());
          proc.setString(4, ev.getCidade());
          proc.setString(5, ev.getEstado());
          proc.setDate(6,(Date) ev.getData_inicio());
          proc.setString(7, ev.getTipo());

          setRs(proc.executeQuery());
          //proc.close();

          }catch(SQLException ex) {
                ex.printStackTrace();
            }
    }

No banco de dados da certo, mas executando dessa maneira pela aplicação não da nada. Não gera exceção, não retorna mensagem e nem eh inserido no banco.

Forte abraço!

Infelizmente não conheço Postgresql e não tenho como ajudar mais, mas talvez o link abaixo ajude:

http://imasters.uol.com.br/artigo/2831/postgresql/chamando_stored_procedures_do_postgresql_em_aplicacoes_java/

Seguinte, o CallableStatement tem uma forma única de trabalhar independente do SGBD utilizado.

O erro está na hora que vc seta o primeiro parametro. Ele sempre é de saída. Vou dar aqui um exemplo comentado:

.
.
.
callableStatement = connection.prepareCall("{? = call PROCEDURE(?, ?, ?)}");
//Aqui está o seu erro!!! Se ue não me engano aqui vai vir o número de linhas afetadas
callableStatement.registerOutParameter(1, Types.INTEGER);
//Agora estou configurando o primeiro parametro da procedure, e vc nao está louco, o índice realmente é 2
callableStatement.setString(2, "Valor");
callableStatement.setInt(3, 1450);
callableStatement.setString(4, "Terceiro Parametro");
callableStatement.execute();
.
.
.

Espero ter ajudado…

Dá pra fazer com PrepareStatement também, do mesmo jeito.

PrepareStatement pstm = con.PrepateStatement("select nome_procedure()");
pstm.executeQuery();

Se houver parametros basta usar:

pstm.setTipoDeDado(indice,valor);

indice é 1, 2, 3…, n e valor é o valor do campo.

[quote=shgo]Seguinte, o CallableStatement tem uma forma única de trabalhar independente do SGBD utilizado.

O erro está na hora que vc seta o primeiro parametro. Ele sempre é de saída. Vou dar aqui um exemplo comentado:

.
.
.
callableStatement = connection.prepareCall("{? = call PROCEDURE(?, ?, ?)}");
//Aqui está o seu erro!!! Se ue não me engano aqui vai vir o número de linhas afetadas
callableStatement.registerOutParameter(1, Types.INTEGER);
//Agora estou configurando o primeiro parametro da procedure, e vc nao está louco, o índice realmente é 2
callableStatement.setString(2, "Valor");
callableStatement.setInt(3, 1450);
callableStatement.setString(4, "Terceiro Parametro");
callableStatement.execute();
.
.
.

Espero ter ajudado…[/quote]

Para saber que parâmetros vc está configurando, basta olhar a quantidade de “?”, a primeira possui o índice 1, a segunda 2, e assim sucessivamente.