[RESOLVIDO] Erro de sintaxe no MySQL

E ai pessoal,

Estou com um probleminha. Tenho uma tabela no banco de dados chamada Clientes.
Essa tabela tem os campos IdCliente int(3), NmCliente varchar(50), NrCpf varchar(14) e DtNcto Date.
Acontece q eu to tentando trazer o valor de volta do banco de dados para a minha tela web, e da um erro.
Tentei fazer a conversão de Date para varchar no banco mesmo, pra retornar como uma String, mas ai q acontece o erro.

Essa é minha query:

E esse é o erro que o MySQL retorna:

ERROR 1064 (42000): 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 'varchar(10), DtNcto, 103) as DtNcto FROM Clientes' at line 1

E por isso da o erro na minha aplicação que não mostra o resultado nos campos de resultados.
Todos os outros comandos funcionam, Insert, Update, Delete, menos o de busca, que tem que mostrar os valores na tela.

Alguem aí me da uma luz por favor?

Obrigado

cara,

pq vc nao usa o objeto Date msm?

t+

No objeto Java, trabalha com o Date (java.util.Date) ou Calendar.

Para formatar a data na aplicação, usa o SimpleDateFormat. Artigo antigo, porém muito útil sobre esse assunto http://www.guj.com.br/articles/8

Olá cle.darsie,

Se deseja formatar a data no banco, veja esta matéria: http://paposql.blogspot.com/2011/08/funcao-para-formatar-datas-no-mysql.html

Abraços.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

Valeu galera,

[quote]alissonvla
08/11/2011 12:11:15 Assunto: Re:Erro de sintaxe no MySQL
cara,

pq vc nao usa o objeto Date msm?

t+[/quote]
Alisson,
Se eu utilizar como objeto, consigo trazer normalmente, mas ai eu vou ter problemas com a inserção, então eu acho mais fácil converter do banco e retornar o valor como uma String.

[quote]Jair Rillo Junior
08/11/2011 12:15:25 Assunto: Re:Erro de sintaxe no MySQL
No objeto Java, trabalha com o Date (java.util.Date) ou Calendar.

Para formatar a data na aplicação, usa o SimpleDateFormat. Artigo antigo, porém muito útil sobre esse assunto http://www.guj.com.br/articles/8[/quote]
Jair,
Eu já estou usando um método de conversão. Cheguei a ver isso ai mesmo até. Eu converto a String que é digitada no campo de data para um objeto Date, e salvo no banco assim. Funciona normal. O problema está sendo fazer o contrario. Por isso estou tentando converter de um tipo Date pra String.

[quote]Fabiano Abreu
08/11/2011 12:24:08 Assunto: Re:Erro de sintaxe no MySQL
Olá cle.darsie,

Se deseja formatar a data no banco, veja esta matéria: http://paposql.blogspot.com/2011/08/funcao-para-formatar-datas-no-mysql.html

Abraços.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL[/quote]
Fabiano,
Esse seria o unico modo de converter no banco de dados o valor? Será q daquele modo q eu descrevi não da mesmo? Como é feito no Sql Server.

Valeeu…

Ai vai depender do formato que precisa.

Tem que ser DD-MM-YYYY HH:MM:SS em string, ou YYYY-MM-DD HH:MM:SS em string?

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

Bom, ai eu preferia no formato sem horas… Só com a data mesmo… dd/MM/yyyy em String. Isso é possivel?

Sim, no exemplo que apresento no blog, altere para:

date_format(now(), '%d/%m/%Y')

Abraços.
_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

Certo Fabiano,
Eu fiquei fuçando e consegui, valeu pela resposta. Agora ele converte certinho.
Mas agora está acontecendo um erro que não tinha antes…

com.mysql.jdbc.exceptions.jdbc4.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 '%d/%m/%Y') as DtNcto FROM Clientes WHERE NmCliente like 'Cleverson Darsie'' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2569) at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1510) at br.com.weblibrary.utils.DBUtils.executeQuery(DBUtils.java:54) at br.com.weblibrary.dao.ClientesDAO.locate(ClientesDAO.java:46) at org.apache.jsp.cliente_jsp._jspService(cliente_jsp.java:135) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:279) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 08/11/2011 15:14:58 org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet [jsp] in context with path [/WebLibrary] threw exception [java.lang.NullPointerException] with root cause java.lang.NullPointerException at br.com.weblibrary.dao.ClientesDAO.locate(ClientesDAO.java:49) at org.apache.jsp.cliente_jsp._jspService(cliente_jsp.java:135) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:279) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

O meu código de busca está assim:

[code] public ClienteDTO locate(String key) throws Exception {
String sql = “SELECT IdCliente, NmCliente, NrCpf, date_format(DtNCto, %d/%m/%Y’) as DtNcto”
+ " FROM Clientes WHERE NmCliente like ‘" + key + "’;";
ResultSet rs = DBUtils.executeQuery(con, sql);

	try {
		if (rs.next()) {
			ClienteDTO dto = new ClienteDTO();
			dto.setIdCliente(rs.getInt("IdCliente"));
			dto.setNmCliente(rs.getString("NmCliente"));
			dto.setNrCPF(rs.getString("NrCpf"));
			dto.setDtNascimento(rs.getString("DtNcto"));
			return dto;
		}
	} catch (SQLException ex) {
		Logger.getLogger(ClientesDAO.class.getName()).log(Level.SEVERE, null, ex);
	} finally {
		DBUtils.closeResultSet(rs);
	}
	return null;
}[/code]

Caraca, um negócio simples q tá dando dor de cabeça…

Tio, só uma perguntinha: não está faltando uma aspa simples aqui, antes do “%d”?

     String sql = "SELECT IdCliente, NmCliente, NrCpf, date_format(DtNCto, %d/%m/%Y') as DtNcto"  
             + " FROM Clientes WHERE NmCliente like '" + key + "';";

Tome mais cuidado - programação é atenção a detalhes. Se tiver dúvida, primeiro execute o comando SQL em uma ferramenta como o MySQL Workbench ( http://www.mysql.com/downloads/workbench/ ) e depois ponha a string SQL no seu programa.

Note que a mensagem de erro é bem amigável e já lhe disse mais ou menos onde procurar:

É verdade entanglement, estava faltando isso.
Porém continua o mesmo erro, só mudou uma coisa:

Agora aparece a ‘aspinha’ que não tinha colocado antes.
É como se não estivesse reconhecendo o começo date_format(DtNcto,

Faz um teste, roda a consulta direto no banco, veja se funciona.

Sim, Fabiano, no banco ele funciona. Só quando eu rodo ele no Eclipse que da esse erro.

Bom, meu forte é banco de dados, na parte front eu não manjo muito.

Mas veja se o tipo de dados no front não esta do tipo date sendo que agora a informação é uma string.

Abraços.

[quote=entanglement]Tio, só uma perguntinha: não está faltando uma aspa simples aqui, antes do “%d”?

     String sql = "SELECT IdCliente, NmCliente, NrCpf, date_format(DtNCto, %d/%m/%Y') as DtNcto"  
             + " FROM Clientes WHERE NmCliente like '" + key + "';";

Tome mais cuidado - programação é atenção a detalhes. Se tiver dúvida, primeiro execute o comando SQL em uma ferramenta como o MySQL Workbench ( http://www.mysql.com/downloads/workbench/ ) e depois ponha a string SQL no seu programa.

Note que a mensagem de erro é bem amigável e já lhe disse mais ou menos onde procurar:

[quote]
com.mysql.jdbc.exceptions.jdbc4.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 ‘%d/%m/%Y’) as DtNcto FROM Clientes WHERE NmCliente like ‘Cleverson Darsie’’ at line 1
[/quote][/quote]

Eu não pus a aspa no lugar certo de propósito: eu não corrigi o seu código. Por favor, ponha o raio da aspa no lugar que lhe indiquei.

Era quase isso mesmo Fabiano,

Meu getDtNcto que joga o valor no front estava retornando Date, coloquei pra retornar String e foi.

Valeu pela dica.