Croblemas com concatenação

12 respostas
S

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 ='[telefone removido]',rg ='[telefone removido]',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:

12 Respostas

cariocathi

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

S

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

cariocathi

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

ozielneto

Pq voce nao usa PreparedStatement???

java.sql.PreparedStatemet…

bom estudo…

S

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:

cv1

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

S

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

Desde já agradeço!

cv1

Qual erro esta dando agora?

S

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?

cv1

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

S

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?

cv1

Não existe. Repare bem:

java.sql.Statement.executeUpdate()

NÃO EXISTE, enquanto:

java.sql.Statement.executeUpdate(String sql)

Existe :wink:

Criado 1 de outubro de 2003
Ultima resposta 2 de out. de 2003
Respostas 12
Participantes 4