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

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:2147483647
]
[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

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

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

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

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();

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

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:

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

É 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();

Aplique um espaço antes do WHERE.

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

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!