【问题标题】:eclipse error “com.mysql.jdbc.exceptions.MySQLSyntaxErrorException” when useing tomcat+JSP+JDBC for deleting a MySQL column使用tomcat+JSP+JDBC删除MySQL列时出现eclipse错误“com.mysql.jdbc.exceptions.MySQLSyntaxErrorException”
【发布时间】:2016-09-02 23:48:12
【问题描述】:

我对 Servlet 的经验有限,我想像这样单击 AllDelete 按钮 this,但是eclipse有错误:

com.mysql.jdbc.exceptions.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 '-6,6' at line 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3124)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1149)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1262)
    at com.newsmanager.dao.NewsDao.getNewsList(NewsDao.java:92)
    at com.newsmanager.servlet.NewsServlet.doPost(NewsServlet.java:75)
    at com.newsmanager.servlet.NewsServlet.doGet(NewsServlet.java:21)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Servlet Java 代码:

else if ("allDelete".equals(oprate)) {
    String[] deleteId = request.getParameterValues("deleteId");
    if (deleteId != null) {
    //the parameter might have more than one value, use getParameterValues(java.lang.String).
    //And getParameterValues returns a String[];22
    for (String string : deleteId) {
        Integer Did = Integer.valueOf(string);
        NewsDao.deleteNewsBYId(Did);

    }
    }
    response.sendRedirect("NewsServlet");

}

JSP 代码:

<input type="submit" value="AllDelete" />
     <input type="hidden" id="oprate" name="oprate" value="allDelete" />
<td align="center"><input type="checkbox" name="deleteId" value="${news.newsId}" /></td>

我在网上搜索了很长时间。但是没有用。请帮助或尝试提供一些想法如何实现这一目标

来自 NewsDao.java 的部分代码

public List<News> getNewsList(Integer pageNumber, Integer pageSize) {
List<News> NewsList = new ArrayList<News>();
conn = DbConn.getconn();
try {
    int startSize = (pageNumber - 1) * pageSize;
    String sql = "select * from news limit " + startSize + "," + pageSize;
    st = conn.createStatement();
    rs = st.executeQuery(sql);

【问题讨论】:

  • 显示的代码不是产生错误的代码。问题出在com.newsmanager.dao.NewsDao.getNewsList(NewsDao.java:92) 中,从错误的外观来看,您的查询本身有错误,或者您将值连接到查询字符串中,而不是正确使用参数。
  • 衷心感谢您的回答:),我已经添加了NewsDao.java的部分代码,我该怎么办?

标签: mysql eclipse servlets jdbc


【解决方案1】:

鉴于错误

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“-6,6”附近使用正确的语法

和显示的代码,您正在尝试执行查询

select * from news limit -6,6

syntax for limitLIMIT {[offset,] row_count | row_count OFFSET offset}。偏移量(也不允许行计数)不允许使用负值,因为这会导致您在第一行之前要求行(这当然是不可能的)。因此,MySQL 语法要求您提供无符号整数值,提供负值是语法错误。

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多