Problema com UPDATE no HSQLDB "unexpected token: = required: ( in statement [UPDATE..."
9 respostasResolvido
L
Leonardo_Amaral_Scud
Boa noite,
Não estou conseguindo fazer um UPDATE no HSQLDB. O INSERT INTO, CREATE TABLE estão saindo, mas o UPDATE não. Não sei o que é. Não estou conseguindo enxergar o meu erro. Para CREATE e INSERT uso essa mesma função que me retorna um PreparedStatement.
Statementsst=newStatements();Stringsql="UPDATE MJ SET Value = ? WHERE Row = ?";PreparedStatementps=st.CreatePreparedStatement(sql,conn);try{ps.setString(1,J11); ps.setInt(2, 1);ps.executeUpdate();}catch(SQLExceptione){
JOptionPane.showMessageDialog(null,e.getMessage());}finally{
if(ps!=null){
try{
ps.close();}catch(SQLExceptionex){
JOptionPane.showMessageDialog(null,ex.getMessage());}
}
}
publicPreparedStatementCreatePreparedStatement(Stringsql,Connectionconn){
try{
returnconn.prepareStatement(sql);}catch(SQLExceptione){
JOptionPane.showMessageDialog(null,e.getMessage());returnnull;}
}
Estou editando para acrescentar mais informação… O código da erro na hora de criar o PreparedStatement. O erro está no comando sql (ao que tudo indica). Mas eu não estou conseguindo ver erro alí.
O campo Row está recebendo 1 do seu PS, será sempre 1 para o SQL?
T
Trapezus
Experimente utilizar ps.execute(); ao invés de ps.executeUpdate();
L
Leonardo_Amaral_Scud
Então, esse 1 do ps não está influenciando… Tenho mais valores nessa tabela. A minha intenção é atualizar mais de um desses valores de uma única vez (esse é apenas um desses valores). E como sei onde estão localizados, acabei fixando a linha.
Voltando ao problema. Depois que postei o comentário, eu verifiquei que o erro encontra-se na string do UPDATE.
Eu verifiquei a variável ps aqui, e ela chega igual a null na atribuição dos parâmetros. Eu recebo dois erros aqui:
1 - Na função que cria o PreparedStatement. Ocorre o erro do título (unexpected token: = required: ( in statement [UPDATE MJ SET Value = ? WHERE Row = ?]). (Verifiquei a variável ps, e ele chega igual a null na atribuição dos parâmetros);
2 - Na linha da atribuição dos parâmetros. (O ps é igual a null, então não tem como inserir os parâmetros).
Verifiquei a variável ps aqui, e ela é igual a null (não está gerando o PreparedStatement por conta da string UPDATE). Como não gera o PS, não tem como atribuir os parâmetros (ocorre o segundo erro). Alterar o ps.executeUpdate() não vai funcionar.
L
Leonardo_Amaral_Scud
E até onde eu li, não está errado utilizar o executeUpdate().
T
Trapezus
Não disse isto.
Normalmente utilizo assim:
con=DriverManager.getConnection(caminho,usuario,senha);PreparedStatementpst=con.prepareStatement("update usuarios set nome_usuario=? where codigo_usuario=?");pst.set's....pst.execute();
L
Leonardo_Amaral_Scud
Entendi. Não seria de todo ruim testar o execute. Mas o erro está nesta string…
Eu vou tentar alterar o nome da tabela e das colunas para ver se isso influencia em alguma coisa. Hoje li sobre alguém que teve um erro parecido pelos nomes das tabelas e colunas que ele utilizou entrarem em conflito com nomenclaturas utilizadas pelo BD ou pelo provedor. Era com outro banco dados (não com o HSQLDB). Até tentei adotar a mesma solução, mas não funcionou comigo.
T
Solucao aceita
Trapezus1 like
Pode ser palavra reservada também. Não é de duvidar.
L
Leonardo_Amaral_Scud1 like
Isso mesmo! Não precisei nem alterar os campos para saber. Por “palavras reservadas” consegui encontrar esse link: As 1.226 palavras reservadas encontradas nos principais SGBD (SQL)
Que me levou até o arquivo Tokens.java e me fez encontrar a lista de palavras reservadas do HSQLDB. Não posso usar ROW e VALUE. Obrigado!
Será que tem como inserir uma palavra reservada com algum colchetes, aspas, aspas simples etc? Nesse tópico que li, um par de colchetes resolvia o problema. Tentei aqui e não deu certo. Tentei parênteses também e também não funcionou.