Problemas com parametros de tipos compostos de banco de dados em java

0 respostas
K

Olá pessoal. Este é meu primeiro tópico no fórum.

E já venho com uma dúvida meio pesada.

É o seguinte eu estou montando uma aplicação que acessa um banco de dados, mais especificamente o PostgreSql 8. Tenho no banco de dados um tipo definido por mim chamado "t_cidade"
A definição dele é a seguinte:

CREATE TYPE t_cidade AS (
id INTEGER,
nome VARCHAR,
cep VARCHAR,
ddd VARCHAR,
uf VARCHAR
);

E uma função que faz a inclusão de uma cidade.

CREATE OR REPLACE FUNCTION f_insert_cidade (arg_cidade T_CIDADE)RETURNS INTEGER AS $padrao$

DECLARE

idt <a href="http://cidade.id">cidade.id</a>%TYPE;

BEGIN

INSERT INTO cidade(nome, cep, ddd, uf) VALUES ((arg_cidade).nome, (arg_cidade).cep, (arg_cidade).ddd, (arg_cidade).uf) RETURNING id INTO idt;

RETURN idt;

END;

$padrao$

LANGUAGE plpgsql;

O problema é quanto tento inserir uma cidade através do java utilizando JDBC, implemento java.sql.SQLData em uma classe chamada cidade.

public class Cidade implements SQLData {

private String TYPE_NAME = t_cidade;

private Integer id;

private String nome;

private String cep;

private String ddd;

private String uf;



// Geters e Setters aqui e métodos implementados da interface SQLData.

}

Quando tento executar a inserção chamando a função abaixo.

[color=blue]public Integer[/color] addCidade(Cidade cidade) [color=blue]throws[/color] SQLException {

Connection cnn = getConexao();

CallableStatement cl= null;

cl = cnn.prepareCall(“call f_insert_cidade_t(?);”);

cl.setObject(0,cidade);

cl.executeQuery();

[color=blue]return[/color] null; [color=green]//Ainda não estou retornando nada apenas quero testar a inserção.[/color]

}

Por fim aparece o erro.

[color=red]Não pode inferir um tipo SQL a ser usado para uma instância de Classes.Cidade. Use setObject() com um valor de Types explícito para especificar o tipo a ser usado.[/color]

Se alguém souber onde está o erro me ajuda por favor.
Vlw… :lol:

Criado 1 de agosto de 2010
Respostas 0
Participantes 1