Atualização

Estou com um problema para fazer a atualização dos registros em meu banco de dados. Já consegui descobrir como se faz para incluir, deletar e inserir dados, mas não sei como eu faço para atualizar os dados.
Segue o código abaixo

private void jAtualFornecedorActionPerformed(java.awt.event.ActionEvent evt) {
try
{
String classpath = “mysql-connector-java-5.0.4-bin.jar”;
String driverName = “com.mysql.jdbc.Driver”;
Class.forName(driverName);
String url = “jdbc:mysql://localhost:3306/hiroko”;
String username = “administrador”;
String password = “123456”;
Connection con= DriverManager.getConnection(url, username, password);

            atual = ("update fornecedor set (codigo = " + Integer.parseInt(jTFcodigo.getText()) + ", contato = " + this.jTFcontato.getText() + ", cpfcgccnpj = " + Integer.parseInt(this.jTFcgccpf.getText()) + ", endereco = " + this.jTFendereco.getText() + ", cidade = " + this.jTFcidade.getText() +  ", uf = " + this.jCBuf.getName() + ", telefone = " + Integer.parseInt(this.jTFtelefone.getText()) + ", email = " + this.jTFemail.getText() + ", site = " + this.jTFsite.getText() + ", notafiscal = " + Integer.parseInt(this.jTFfiscal.getText()) + ") where (codigo = '" + Integer.parseInt(jTFcodigo.getText()) + "', contato ='" + this.jTFcontato.getText() +  "', cpfcgccnpj ='" + Integer.parseInt(this.jTFcgccpf.getText()) + "', endereco = '"  + this.jTFendereco.getText() +  "', cidade = '" + this.jTFcidade.getText() + "', uf = '" + this.jCBuf.getName() + "',telefone = '" + Integer.parseInt(this.jTFtelefone.getText()) + "',email = '" + this.jTFemail.getText() + "', site = '" + this.jTFsite.getText() + "', notafiscal'" + Integer.parseInt(this.jTFfiscal.getText()) + "')");
                               
            PreparedStatement stmt = con.prepareStatement(atual);
            stmt.executeUpdate(atual);                
       } 
            catch (ClassNotFoundException e)                
        {
                //Driver não encontrado
            System.out.println("O driver expecificado não foi encontrado.");
            e.printStackTrace();
        } 
            catch (SQLException e)
        {
                //Não está conseguindo se conectar ao banco
            System.out.println("Não foi possível conectar ao Banco de Dados");
            e.printStackTrace();
        }
}                                                

quando eu mando atualizar ele me retorna a seguinte mensagen de erro.

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘(codigo = 56584, contato = manuelsilca, cpfcgccnpj = 8398, endereco = rua onde q’ at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1316)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1235)
at hfuniformes.Fornecedor.jAtualFornecedorActionPerformed(Fornecedor.java:311)
at hfuniformes.Fornecedor.access$400(Fornecedor.java:21)
at hfuniformes.Fornecedor$6.actionPerformed(Fornecedor.java:265)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

seu problema não é de java, e sim de sintaxe SQL. Dá uma validada nela.

Aliás, até já vi o que é. Você tá fazendo:

update fornecedor set (codigo

ao invés de :

update fornecedor set codigo

estuda um pouquinho sql. Tem um site bem legal chamado:

http://sqlzoo.net

Que te permite até testar em vários tipos de servidor.

abraços,

otávio

No seu caso, estão faltando um monte de aspas. O comando que o MySQL recebeu é:

... codigo = 56584, contato = manuelsilca, cpfcgccnpj = 8398, endereco = rua ...

Daí dá para perceber que você montou a string SQL errado.

Dica: use PreparedStatement, para evitar esses problemas de aspas simples, duplas, duplicadas etc.

vc usou um PreparedStatement, mas como se fosse um statement comum…

nao faça esse monte de concatenação… faça assim:


StringBuffer sql = new StringBuffer();

sql.append("update tabela set nascimento = ?");
sql.append(", nome = ?");
sql.append(", idade = ?");
sql.append(", telefone = ?");
sql.append(", sexo = ?");
sql.append(" where codigo = ?");

PreparedStatement stmt = con.prepareStatement(sql);

//aqui vc vai passando os argumentos

stmt.setDate(1, new java.sql.Date());
stmt.setString(2, "Fabio");
...

stmt.execute();

o codigo fica bem mais clean e mais facil de alterar :smiley:

[quote=fabiocsi]

o codigo fica bem mais clean e mais facil de alterar :D[/quote]

Você está corretíssimo em usar StringBuffer ou StringBuilder. Mas os motivos não são estes.
O motivo é que o código fica significativamente mais rápido.

[quote=chicocx][quote=fabiocsi]

o codigo fica bem mais clean e mais facil de alterar :D[/quote]

Você está corretíssimo em usar StringBuffer ou StringBuilder. Mas os motivos não são estes.
O motivo é que o código fica significativamente mais rápido.[/quote]

sim, sim, StringBuffers sao mais rapido…

mas qdo me referi à “cleanidade” do codigo, nao estava falando dos appends do SB, e sim dos “setXXX” do PreparedStatement…