我在MySQL的表中中存储了一些SQL语句,用JSP读出这些语句,然后用这些语句,结果却出现这样的错误:
om.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 '??,??,??? from CHART' at line 1
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
        at com.mysql.jdbc.Util.getInstance(Util.java:381)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
        at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1383)
        at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
        at utils.DBOperator.queryDB(DBOperator.java:25)
        at utils.DBTools.getView(DBTools.java:955)
        at org.apache.jsp.chartShow_jsp._jspService(chartShow_jsp.java:91)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
2009-8-11 19:49:16 org.apache.catalina.core.StandardContext reload
信息: Reloading this Context has started然而我用System.out.println打出来那些查询语句后直接用命令行进行查询,却查询成功了,这是问什么呢》?
附:System.out.pirntln打印出的文字:select 产量,月份,城市 from CHART

解决方案 »

  1.   

    问题确实很怪,你确定输出的sql语句单独可以执行
      

  2.   

    在发送sql语句时中文已变成了乱码,字段可以改成英文试试
      

  3.   

    是的,我是在netbeans下测试的,可以出结果
      

  4.   

    希望你能统计数据库和代码的编译,能把打印出来的sql原样的发送到mysql服务器去解析
      

  5.   

    前面半句没看懂
    我现在不知道从哪里入手,不知是java,还是tomcat,抑或mysql的问题。从网上找了些资料,有种说法是java与其他的存储系统交互时会发生问题,即字符向字节流转换时会发生错误,正在用那上面的方法解决,可试了几次,没成功。
      

  6.   

    在JSP页面SQL变成乱码 自然执行不了 设置下页面的编码格式 另外建议LZ不要用中文做列名
      

  7.   

    问题解决了,在context.xml文件中的jdbc url中加入?characterEncoding=UTF-8就可以了,但这个url似乎只接受一个这种变量,我试过&和?,都没成功,估计其它地方配置还有些问题,或者我这个版本的mysql的url分割符有些改变。
    问题发生的原因我觉得是java与数据库进行交互时会将char->byte,即将字符串转为字节流,然后数据库在将字节流转回字符时格式发生了变化,不知道mysql里面怎么设置可以让它的编码为utf-8.
    不过这个问题既然已经在功能上没什么问题了,就先结贴吧。