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