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!
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:
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.