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.