Bem pessoal, primeiramente boa noite;
Sou bem novo no Java, mas estou aprendendo rápido, e sempre existe a primeira vez de postar uma dúvida no fórum não é mesmo!? Então acredito estar no lugar correto.
Bem, estou desenvolvendo uma aplicação que vai interagir muito com o banco, e estamos utilizando o PostgreSQL. Criei uma stored procedure (function) no banco que faz a leitura de uma tabela de produtos e lança em uma tabela de movimento determinados movimentos de acordo com alguns critérios que criei na própria function.
O problema pareceu simples de início, mas depois de três dias de intensas tentativas cheguei a conclusão que não consigo efetuar essa tarefa. Pesquisei documentação do TopLink, algumas classes como StoredFunctionCall, Query e seu método createNativeQuery, dentre outras do TopLink, mas todas sem sucesso. A maioria das tentativas me diziam que a minha instrução estava errada.
Gostaria de saber dos senhores se existe uma forma padrão para chamar stored procedures no JAVA, que estão especificamente no PostgreSQL, no formato de linguagem PL/PgSQL. Abaixo vai minha última tentativa frustrada, e o seu respectivo erro.
Desde já agradeço a atenção de todos!
package br.com.projeto2.bean;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
import javax.swing.JOptionPane;
public class CallProcedure {
public void storedProcedure() {
try {
String url = "jdbc:postgresql://Localhost:5432/banco_tcc";
String usr = "postgres";
String pas = "******";
Class.forName("org.postgresql.Driver");
Connection MinhaConexao = DriverManager.getConnection(url, usr, pas);
MinhaConexao.setAutoCommit(false);
CallableStatement proc = MinhaConexao.prepareCall("{? = popula_tb_movimento_estoque()}");
proc.registerOutParameter(1, Types.INTEGER);
proc.execute();
proc.close();
} catch (ClassNotFoundException ex) {
System.out.println("Driver JDBC- nao encontrado");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Nao houve Inclusao. Erro: " + ex.getMessage() + "", "Inclusão sem sucesso.", JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
}
}
}
[color=red]Erro Gerado:[/color]
[EL Info]: 2012-08-24 20:23:03.687--ServerSession(7079781)--EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461
[EL Info]: 2012-08-24 20:23:04.15--ServerSession(7079781)--file:/C:/Users/Holyspear/Documents/NetBeansProjects/projeto_TCC2/build/classes/_banco_tccPU login successful
org.postgresql.util.PSQLException: Malformed function or procedure escape syntax at offset 5.