Croblemas com concatenação

Estou tentando executar um update mas dá um erro:

Syntax error or access violation, message from server: "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 '='Leandro',cpf ='1111111111',rg ='1111111111',data ='1/10/2003'" 

Tenho quase certeza que é algum erro na concatenação. Meu código:

StringBuffer sql = new StringBuffer();
   sql.append("update clientes set");
   sql.append("nome ='" + request.getParameter("nome") + "',");
   sql.append("cpf ='" + request.getParameter("cpf") + "',");
   sql.append("rg ='" + request.getParameter("rg") + "',");
   sql.append("data ='" + request.getParameter("data") + "',");
   sql.append("end ='" + request.getParameter("end") + "',");
   sql.append("bairro ='" + request.getParameter("bairro") + "',");
   sql.append(" tel1 ='" + request.getParameter("tel1") + "',");
   sql.append("tel2 ='" + request.getParameter("tel2") + "'," );
   sql.append("celular ='" + request.getParameter("cel") + "'," );
   sql.append("cidade ='" + request.getParameter("cid") + "'," );
   sql.append("uf ='" + request.getParameter("uf") + "',");
   sql.append("cep ='" + request.getParameter("cep") + "'");
   sql.append("where codigo = " + request.getParameter("cod"));

   int res = stm.executeUpdate(sql.toString());

Desde já agradeço! :smiley:

A data, vc tem q passar para o BD como ano-mes-dia e os campos numéricos nao tem ’ '.

Todos os campos em questão são do tipo char.

Tente passar a data como ‘aaaa-mm-dd’, outra coisa, q vi agora. Falta um espaço entre o set e o nome.

Pq voce nao usa PreparedStatement???

java.sql.PreparedStatemet…

bom estudo…

Não consigu impolementa-lo com o update.
O erro que dá:

[javac] Since fork is true, ignoring compiler setting.
    [javac] Compiling 1 source file
    [javac] Since fork is true, ignoring compiler setting.
    [javac] C:TomcatworkStandalonelocalhost	ccclientesalteracao2_jsp.java:57: unclosed string literal
    [javac] PreparedStatement sql = con.prepareStatement("update clientes
    [javac]                                              ^
    [javac] C:TomcatworkStandalonelocalhost	ccclientesalteracao2_jsp.java:62: unclosed string literal
    [javac] 									 cep = ? where codigo = ? ");
    [javac]                                                                                                   ^
    [javac] C:TomcatworkStandalonelocalhost	ccclientesalteracao2_jsp.java:76: ')' expected
    [javac]    int res = stm.executeUpdate();
    [javac]                                 ^
    [javac] 3 errors

Meu código ficou assim:

PreparedStatement sql = con.prepareStatement("update clientes
                                     set nome = ?, cpf = ?, rg = ?, 
									 data = ?, endereco = ?, bairro = ?,
									 tel1 = ?, tel2 = ?, celular = ?,
									 cidade = ?, cep = ?, uf = ?,
									 cep = ? where codigo = ? ");
   sql.setString(1, request.getParameter("nome"))
   sql.setString(2, request.getParameter("cpf"))
   sql.setString(3, request.getParameter("rg"))
   sql.setString(4, request.getParameter("data"))
   sql.setString(5, request.getParameter("end"))
   sql.setString(6, request.getParameter("bairro"))
   sql.setString(7, request.getParameter("tel1"))
   sql.setString(8, request.getParameter("tel2"))
   sql.setString(9, request.getParameter("cel"))
   sql.setString(10, request.getParameter("cid"))
   sql.setString(11, request.getParameter("cep"))
   sql.setString(12, request.getParameter("uf"))
   sql.setString(13, request.getParameter("cod"))
   int res = stm.executeUpdate();

Desde já agradeço! :smiley:

Uma String literal em Java tem que comecar e terminar na mesma linha. Simples :wink:

Beleza! Agora só não está aceitando o stm.executUpdate();!

Desde já agradeço!

Qual erro esta dando agora?

O erro é este:


D:TomcatworkCatalinalocalhostprojetoorgapachejspclientesalteracao2_jsp.java:70: cannot resolve symbol
symbol  : method executeUpdate ()
location: interface java.sql.Statement
   int res = stm.executeUpdate();
                ^
1 error

Este método precisa de alguma assinatura?

O método não precisa de nada, mas vc precisa ler o JavaDoc da JDBC, ou perceber que o método Statement.executeUpdate() não existe :wink:

http://java.sun.com/j2se/1.4.1/docs/api/java/sql/Statement.html

Olha cara ainda sou novato e não quero discutir, mas eu olhei lá e tem sim.

 int 	executeUpdate(String sql)
          Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

E está deste jeito. Insot é que eu não entendi. Será que não tem que não precisa de nenhuma assinatura mesmo?

Não existe. Repare bem:

java.sql.Statement.executeUpdate()

NÃO EXISTE, enquanto:

java.sql.Statement.executeUpdate(String sql)

Existe :wink: