Erro jdbc

5 respostas Resolvido
jdbcjava
J

Olá amigos,
estou desenvolvendo um app de banco de horas,
no meu banco tenho o seguinte script:

CREATE TABLE competencia2017

id integer NOT NULL, base character varying(20) NOT NULL, janeiro character varying(20), fevereiro character varying(20), marco character varying(20), abril character varying(20), maio character varying(20), junho character varying(20), julho character varying(20), agosto character varying(20), setembro character varying(20), outubro character varying(20), novembro character varying(20), dezembro character varying(20), CONSTRAINT competencia2017_pkey PRIMARY KEY (id, base), CONSTRAINT competencia2017_id_fkey FOREIGN KEY (id) REFERENCES funcionario (matricula) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION )(

na minha aplicação tenho um método que recebe um funcionário e o mês de competencia que será a coluna da tabela a ser inseridos os dados:

public static int setHoras(Funcionario f, String mes) throws SQLException{
    String ddl = "update competencia"+Controle.ano+" set ? = ? where base = '50%' and id = ?";
    PreparedStatement pstdados = 
            AcessaBD.connection.prepareStatement(ddl, tipo, concorrencia);
    pstdados.setString(1, mes);
    pstdados.setString(2, f.getHoras().getHoras50());
    pstdados.setLong(3, f.getMatricula());
    
    int dados = pstdados.executeUpdate();
    
    String ddl2 = "update competencia"+Controle.ano+"set ? = ? where base = '100%' and id = ?";
    PreparedStatement pstdados2 = 
            AcessaBD.connection.prepareStatement(ddl, tipo, concorrencia);
    pstdados2.setString(1, mes);
    pstdados2.setString(2, f.getHoras().getHoras50());
    pstdados2.setLong(3, f.getMatricula());
           
    
    
    return dados;
}

(Obs: a Concatenação Competencia+Controle.ano é para dar o nome a tabela que será criada a cada novo ano, ou seja “Competencia2017, Competencia2018” etc etc.

pois bem, no preparedStatement acima não está inserindo nada no banco de dados e me trazendo o seguinte erro:

Exception in thread "main" org.postgresql.util.PSQLException: ERRO: erro de sintaxe em ou próximo a "$1"

Posição: 28 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334) at Util.AcessaBD.setHoras(AcessaBD.java:321) at Control.Controle.main(Controle.java:68) C:\Users\johnny\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 FALHA NA CONSTRUÇÃO (tempo total: 3 segundos)

Ja revi varias vezes o código e até materiais sobre JDBC mas aparentemente minha sintaxe ta correta, sql também parece ok,

alguém pode me dar uma sugestão ?

Desde já grato

5 Respostas

I

Você tem uma tabela por ano?
Cada tabela tem uma coluna para cada mês?

J

isso mesmo a coluna “Base” é a base de calculo, 50%, 100%, folgas tiradas
um funcionario tem 5 tuplas e as colunas id e base formam a PK

ESQUEMA BANCO.pdf (317,3 KB)

I

Não é por que a aspas no final está junto da palavra set?

J

ja corrigi o espaço rss… mesmo erro
estranho não ?
sera algum problema de configuração com o jdbc ?

P
Solucao aceita

Isto não funciona. O nome da coluna terá de ser sempre com concatenação de string.

Criado 4 de fevereiro de 2017
Ultima resposta 5 de fev. de 2017
Respostas 5
Participantes 3