Olá pessoas, estou com problemas para inserir dados no banco de dados. O Java exibe a seguinte mensagem de erro:
Exception in thread "main" java.lang.RuntimeException: org.postgresql.util.PSQLException: ERROR: relation
"sequencia_contatos" does not exist
Onde: PL/pgSQL function teste.funcao_contatos() line 3 at assignment
at br.com.lobasfotworks.testejdbc.dao.ContatoDao.insere(ContatoDao.java:33)
at br.com.lobasfotworks.testejdbc.TesteJDBC.main(TesteJDBC.java:28)
Caused by: org.postgresql.util.PSQLException: ERROR: relation "sequencia_contatos" does not exist
Onde: PL/pgSQL function teste.funcao_contatos() line 3 at assignment
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2433)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2178)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:306)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:155)
at org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:144)
at br.com.lobasfotworks.testejdbc.dao.ContatoDao.insere(ContatoDao.java:29)
... 1 more
Ele relata que a q relação “sequencia_contatos” não existe e, para minha surpresa, quando faço a inserção direto no PGADMIN não acontece nenhum erro.
-- Sequencia para incrementar os id's dos contatos automaticamente
CREATE SEQUENCE sequencia_contatos INCREMENT BY 1;
-- Funcao para incrementar automaticamente o ID de cada contato inserido na tabela
CREATE OR REPLACE FUNCTION funcao_contatos()
RETURNS TRIGGER AS
$BODY$
BEGIN
new.id := nextval('sequencia_contatos');
RETURN new;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
-- Uma tabela para guardar os meus contatos
CREATE TABLE contatos (
id BIGINT NOT NULL, -- # de identificacao de cada contato
nome VARCHAR(255),
email VARCHAR(255),
endereco VARCHAR(255),
data_nascimento DATE,
CONSTRAINT contatos_pk PRIMARY KEY (id)
);
-- A cada nova insercao, este gatilho incrementa automaticamente o ID de cada novo
-- contato.
CREATE TRIGGER contatos_trigger BEFORE INSERT
ON contatos
FOR EACH ROW
EXECUTE PROCEDURE funcao_contatos();
Abaixo o meu código da classe principal. Eu realmente não entendi o que tem de errado nele
public class TesteJDBC {
public static void main(String[] args) throws ParseException{
ContatoDao contatoDao;
Contato contato;
SimpleDateFormat dateFormat;
contato = new Contato();
contato.setNome("Ana Maria");
contato.setEmail("amaria@outlook.com");
contato.setEndereco("Rua dos Lobos, 202");
dateFormat = new SimpleDateFormat("dd/MM/yyyy");
contato.setDataNascimento(Calendar.getInstance());
contato.getDataNascimento().setTimeInMillis(dateFormat.parse("04/08/1993").getTime());
contatoDao = new ContatoDao();
contatoDao.insere(contato);
}
}