[AJUDA] - Gravação de dados, comando UPDATE (RESOLVIDO)

10 respostas Resolvido
javamysql
M

Boa tarde, estou tentando gravar dados em um código que está conectado ao banco. O erro descrito, acontece exatamente aqui:

String sql = "UPDATE pedido SET certificado="+x509certificate+ "WHERE id" +carrinho.getId()+ ",";
        ArrayList<String> sqls = new ArrayList<String>(); 
        
        System.out.println("SQL: " + sql);
        sqls.add(sql);
        
              
        for (int i = 0; i < carrinho.getCarrinhoItens().size(); i++) {
            
        sql = "UPDATE itempedido SET status=?"+carrinho.getStatus()+ "WHERE id=" +carrinho.getId(); 
        sqls.add(sql);
        System.out.println("SQL: " + sql);
        }

        
        try {
            for (int i = 0; i < sqls.size(); i++) {
                stmt.executeUpdate(sqls.get(i));
            }

        } catch (SQLException ex) {
            Logger.getLogger(Carrinho.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Erro ao listar os pedidos no banco. TESTE");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        System.out.println("Erro ao conectar com o banco.");
    } finally {
        try {
            
            stmt.close();
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        }
    }
}

Informações: SQL: UPDATE pedido SET certificado=[
[
Version: V3
Subject: CN=Todd Sundsted, OU=One, O=Unknown, L=Alameda, ST=CA, C=US
Signature Algorithm: MD5withRSA, OID = 1.2.840.113549.1.1.4
Key: Sun RSA public key, 512 bits
modulus: 9968003652100383830896151172676879170413973860783387152368230329744344206641652946917754879523411019347066215206523039552216854770288518526883354963978731
public exponent: 65537
Validity: [From: Wed Mar 28 23:50:16 BRT 2001,
To: Fri Apr 27 23:50:16 BRT 2001]
Issuer: CN=Todd Sundsted, OU=One, O=Unknown, L=Alameda, ST=CA, C=US
SerialNumber: [ 00]
Certificate Extensions: 3
[1]: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: E9 4C 24 19 7B F0 5E 05 19 12 7E C3 DC 3F E0 44 .L$…^…?.D
0010: 6F 77 5C 82 ow.
]
[CN=Todd Sundsted, OU=One, O=Unknown, L=Alameda, ST=CA, C=US]
SerialNumber: [ 00]
]
[2]: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:true
PathLen:[telefone removido]
]
[3]: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: E9 4C 24 19 7B F0 5E 05 19 12 7E C3 DC 3F E0 44 .L$…^…?.D
0010: 6F 77 5C 82 ow.
]
]
]
Algorithm: [MD5withRSA]
Signature:
0000: 27 18 36 EB 89 29 D2 F0 D6 9D EA B8 AC 0A 7A 08 '.6…)…z.
0010: 04 FE 67 48 09 84 40 C3 E4 A0 3F 02 F3 6E 6D 95 …gH…@…?..nm.
0020: 22 79 81 BA 29 DE FB 50 90 68 E2 1C 4B 9F 2D E9 "y…)…P.h…K.-.
0030: 98 14 D7 BB 5D C1 7B 16 57 C1 9C 8A 35 62 3E 86 …]…W…5b>.
]WHERE id1,

Informações:   SQL: UPDATE itempedido SET status=?AUTORIZADOWHERE id=1

Informações:   SQL: UPDATE itempedido SET status=?AUTORIZADOWHERE id=1

Grave:   com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near [

[

Version: V3

Subject: CN=Todd Sundsted, OU=One, O=Unknown, L=Alameda, ST= at line 1

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:422)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)

at com.mysql.jdbc.Util.getInstance(Util.java:387)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547)

at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1541)

at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2605)

at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1469)

at servidor.servlets.SrvSincronia.autorizarPedido(SrvSincronia.java:284)

at servidor.servlets.SrvSincronia.processRequest(SrvSincronia.java:126)

at servidor.servlets.SrvSincronia.doPost(SrvSincronia.java:174)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)

at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)

at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)

at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)

at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)

at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)

at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)

at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)

at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)

at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)

at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)

at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)

at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)

at java.lang.Thread.run(Thread.java:745)

Estou tentando corrigir o erro e não consegui acertar a sintaxe por nenhum motivo, suspeito que o erro está em alguma das strings montadas. Estou tentando gravar um certificado, criando um update na tabela pedido e ocorre o erro exatamente aí, na leitura dos dados. Peço a ajuda de vocês

10 Respostas

B

Não é porque esta assim:

UPDATE itempedido SET status=?AUTORIZADOWHERE id=1

Não seria o espaçamento do WHERE (Já que o erro é sobre a sintaxe)?

UPDATE itempedido SET status=?AUTORIZADO WHERE id=1

É mais um questionamento meu do que a solução para o erro. hahaha

M

Pois olha, o erro está ocorrendo exatamente aí, hehehe. Eu cheguei a testar a sintaxe no update pedido, porém, pensando bem, se o erro estivesse ali, já veria a mensagem de erro logo abaixo daquele update. Aquele espaçamento ali realmente não está legal, vou ver bem ali, como ajeitar. Mas acho que está no segundo update o erro. Está por ali

M

O erro ocorre exatamente quando vou gravar um certificado de autorização. Eu estou pensando em serializar o certificado pra gravar…

J

Seu código está conforme acima, porém não deveria ser conforme abaixo ?

String sql = "UPDATE pedido SET certificado = "+x509certificate+ "WHERE id = " +carrinho.getId();

sql = "UPDATE itempedido SET status = "+carrinho.getStatus()+ "WHERE id = " +carrinho.getId();

M

Eu andei modificando um pouco mais a estrutura do código e agora o erro mudou de figura, veja abaixo:

String sql = "UPDATE pedido SET cliente_id = "+carrinho.getUsuario().getId()+ "WHERE certificado = " +x509certificate;

ArrayList sqls = new ArrayList();
for (int i = 0; i < carrinho.getCarrinhoItens().size(); i++) {

sql = "UPDATE itempedido SET status = " +carrinho.getStatus()+ "WHERE valor = " +carrinho.getTotal(); 
        sqls.add(sql);
        System.out.println("SQL: " + sql);
        }
Informações:   SQL: UPDATE itempedido SET status = AUTORIZADOWHERE valor = 15.0

Grave:   com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near valor = 15.0 at line 1

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:422)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)

at com.mysql.jdbc.Util.getInstance(Util.java:387)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547)

at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1541)

at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2605)

at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1469)

at servidor.servlets.SrvSincronia.autorizarPedido(SrvSincronia.java:291)

at servidor.servlets.SrvSincronia.processRequest(SrvSincronia.java:127)

at servidor.servlets.SrvSincronia.doPost(SrvSincronia.java:175)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)

at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)

at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)

at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)

at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)

at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)

at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)

at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)

at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)

at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)

at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)

at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)

at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)

at java.lang.Thread.run(Thread.java:745)

Por incrível que pareça o erro não aparece na leitura do certificado mais, é no segundo update agora, de itempedido

J

O Erro é explícito, erro de sintaxe no seu comando SQL, provavelmente seja no seu comando where que não tem espaçamento neste trecho de código abaixo:

M

E como posso aplicar esse espaçamento? Montando de maneira diferente a string deste update?

J
Solucao aceita

É só você aplicar um espaço antes da escrita do comando, note que eu apliquei os espaços sempre na abertura da string, e quando é encerrada!

sql = " UPDATE itempedido SET status = " +carrinho.getStatus()+ " WHERE valor = " +carrinho.getTotal();

F

Aplique um espaço antes do WHERE.

sql = "UPDATE itempedido SET status = " +carrinho.getStatus()+ "WHERE valor = " +carrinho.getTotal();
sqls.add(sql);

M

Funcionou galera. Consegui resolver as Strings. Atualmente ficaram assim

String sql = " UPDATE pedido SET cliente_id = " +carrinho.getUsuario().getId()+
" WHERE certificado = " +x509certificate;

System.out.println("SQL: " + sql);
              
        ArrayList<String> sqls = new ArrayList<String>(); 
        for (int i = 0; i < carrinho.getCarrinhoItens().size(); i++) {
             
        sql = " UPDATE itempedido SET status = 'AUTORIZADO' " + " WHERE id = " +carrinho.getId() ;
        
          
        sqls.add(sql);
        System.out.println("SQL: " + sql);
        }

        
        try {
            for (int i = 0; i < sqls.size(); i++) {
                stmt.executeUpdate(sqls.get(i));
            }

        } catch (SQLException ex) {
            Logger.getLogger(Carrinho.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Erro ao listar os pedidos no banco. TESTE");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        System.out.println("Erro ao conectar com o banco.");
    } finally {
        try {
            
            stmt.close();
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

}

Na verdade era realmente o espaço que eu não apliquei no WHERE mesmo. Obrigado a todos!

Criado 24 de abril de 2017
Ultima resposta 26 de abr. de 2017
Respostas 10
Participantes 4