ERRO: Stored Precedure que retorna SETOF record apartir de aplicação JAVA

Bom dia.
Criei um stored procedure no PostgreSQL e estou acessando ele apartir de uma aplicação java.
O seguinte erro me atormenta:

[color=red]Conexão estabelecida.
Exception in thread “main” java.lang.IllegalArgumentException: Cannot set a null TableModel
ERRO: uma lista de definição de colunas é requerida para funções que retornam "record"
Posição: 16
Desconectado.
at javax.swing.JTable.setModel(JTable.java:3681)
at br.ifmt.lisa.visao.JFrameInicio.pegaModeloAluno(JFrameInicio.java:850)
at br.ifmt.lisa.visao.JFrameInicio.atualizaTabelaAluno(JFrameInicio.java:861)
at br.ifmt.lisa.visao.JFrameInicio.(JFrameInicio.java:19)
at br.ifmt.lisa.visao.Main.main(Main.java:6)
[/color]

Esse é o meu procedimento armazenado (apenas o cabeçalho*):

CREATE OR REPLACE FUNCTION buscar_tabela_situacao() RETURNS SETOF record AS

Esse é o meu método que chama o procedimento:

public DefaultTableModel BuscarTabelaSituacao() {
        Object[] vetor = new Object[6]; //array de objetos    
        DefaultTableModel modelo = new DefaultTableModel(null, new String[]{"Nome", "Disciplina", "Primeira_Nota", "Segunda_Nota", "Media", "Situacao"});

        try {

            String sql = "select * from Buscar_Tabela_Situacao() AS (Nome varchar, Disciplina varchar ,Primeira_Nota numeric ,Segunda_Nota numeric, Media numeric, Situacao varchar) ";
            // connection.setAutoCommit(false);
            // Carrega os parametros         
            PreparedStatement pst = connection.prepareStatement(sql);
            // executa o comando de consulta 
            System.out.println(pst.toString());
            ResultSet results = pst.executeQuery();

            while (results.next()) {
                //obtendo dados de uma linha usando o nome da coluna
                vetor[0] = results.getString("Nome");
                vetor[1] = results.getString("Disciplina");
                vetor[2] = results.getDouble("Primeira_Nota");
                vetor[3] = results.getDouble("Segunda_Nota");
                vetor[4] = results.getDouble("Media");
                vetor[5] = results.getString("Situacao");
                modelo.addRow(vetor);//preenche modelo enquanto houver registros no vetor
            }

            results.close();
            pst.close();
            // connection.commit();
            return modelo;
        } catch (SQLException e) {
            System.out.println(e.getMessage());
            return null;
        } finally {
            // este bloco finally sempre executa na instrução try para
            // fechar a conexão a cada conexão aberta
            try {
                // stmt.close();
                connection.close();
                System.out.println("Desconectado.");
            } catch (SQLException e) {
                System.out.println("Erro ao desconectar" + e.getMessage());
            }
        }
    }


OBS: No PostgreSQL está funcionando certinho com a seguinte chamada:

select * from Buscar_Tabela_Situacao() AS (Nome varchar, Disciplina varchar ,Primeira_Nota numeric ,Segunda_Nota numeric, Media numeric, Situacao varchar)

Mas quando não especifico as colunas dá o mesmo erro que está acontecendo no java:

[color=red]ERRO: uma lista de definição de colunas é requerida para funções que retornam “record”[/color]

att,
Java_Rosa

Pelo o que entendi voce esta “setando” um valor para o TableModel com nulo em seu Jtable, apenas isso. Nao vi em que ponto esse “null” do seu TableModel esta associado a execucao da query.

Outra coisa, crie sempre um novo array antes de inseri-lo em seu table model:

  ......
            while (results.next()) {  
               vetor = new Object[6]; //array de objetos      
                //obtendo dados de uma linha usando o nome da coluna  
                vetor[0] = results.getString("Nome");  
.....

Vini Fernantes,

Meu TableModel está vazio justamente porque não foi retornado nada do procedimento, uma vez que eu preciso informar uma lista de definição de colunas, que é requerida para funções que retornam “record”;

Eu pensei que fazendo assim no java:

select * from Buscar_Tabela_Situacao() AS (Nome varchar, Disciplina varchar ,Primeira_Nota numeric ,Segunda_Nota numeric, Media numeric, Situacao varchar)

como eu faço no banco daria certo, mas infelizmente não.

O que não estou conseguindo é informar essa lista de colunas no código java.

Obrigada.

Att,
Java_Rosa

Cara, acredito que voce esteja executando o “statement” incorreto, Dê uma olhada nos seguintes links:

http://www.guj.com.br/java/188294-executando-store-procedure-

http://javafree.uol.com.br/topic-857371-executar-stored-procedure.html