Não estou conseguindo colocar dados em uma função criada no postgresql

Olá a todos
Estou com uma dúvida.
Estou criando um sistema para cadastro de uma loja de eletrodomésticos, no qual eu criei uma função no próprio SGBD para fazer a inserção dos dados.
A função que eu tenho é esta:

CREATE OR REPLACE FUNCTION insereloja(cnpj bigint, nome character varying, rua character varying, cidade character varying, estado character varying, numero integer, telefone integer) RETURNS void AS $BODY$ BEGIN INSERT INTO Loja VALUES (cnpj, nome, rua, cidade, estado, numero, telefone); END $BODY$ LANGUAGE plpgsql

Porém, estou trabalhando com o java, juntamente com SGBD. Fiz a conexão certinho, e aparentemente tudo certo.
O problema está acontecendo quando eu passo os parâmetros pra função neste código:

[code] public void insereLojanoBD(long cnpj, String nome,String rua, String cidade, String estado, int numero, int telefone){
try{
Connection con;

            con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/udesc", "robson", "");  
            Statement stm = con.createStatement();  
            stm.executeQuery("SELECT insereloja(cnpj,nome,rua,cidade,estado,numero,telefone)");            
            System.out.println("Loja inserida com sucesso");
        }catch(Exception e){
            e.printStackTrace();
        }

[/code]

Aparece um erro falando que o cnpj não existe e vai pro catch.
Obs.: Se eu tentar colocar os valores manualmente, a função insere normalmente.

Obrigado galera!

Vamos analisar seu comando primeiro:

  "SELECT insereloja(cnpj,nome,rua,cidade,estado,numero,telefone)"

Em nenhum momento aqui você preenche os valores desses parâmetros. Você está tentando inserir um cnpj com valor cnpj , por exemplo.
Não vi a mensagem de erro, mas provavelmente o banco vai considerar cnpj uma variável (que não existe no escopo dele) e por isso dá erro.
Se puder informar a mensagem de erro exata, isso ficaria mais claro.

Enfim, o que você provavelmente quer fazer é o seguinte:

  "SELECT insereloja(" + cnpj + "," + nome + "," + rua + "," + cidade + "," + estado + "," + numero + "," + telefone + ")"

Que aí sim você montará seu comando sql com os valores das variáveis no java que sua função insereLojanoBD recebe.

Resolvido essa parte (espero), algumas considerações:

  • Não use Statement. Nunca! Procure aprender como usar o PreparedStatement. Ou no seu caso, talvez até a CallableStatement.

  • Por que está utilizando uma função no Postgresql apenas para fazer insert? Por que não escrever o insert diretamente?
    Se for por performance, não se preocupe, não há diferença.