【问题标题】:Update MySQL table from jsp从 jsp 更新 MySQL 表
【发布时间】:2012-04-15 12:38:52
【问题描述】:

我在 jsp 文件中有这些。但是这些值不会在 mysql 表中更新。可能是它没有承诺。我该如何解决这个问题?

String passc1 = request.getParameter("passc1");
String accid = request.getParameter("accid");
int i = 0;

String sql =
        " update customertb "
        + " set passwd = ?"
        + " where acc_no = ?;";

try {
   PreparedStatement ps = con.prepareStatement(sql);
    ps.setString(1, passc1);
    ps.setString(2, accid);

    i = ps.executeUpdate();
} catch (Exception e) {
    // do something with Exception here. Maybe just throw it up again
} finally {
    con.close();

}

堆栈跟踪

2012 年 4 月 1 日晚上 11:29:02 org.apache.catalina.core.StandardWrapperValve 调用 严重:servlet [jsp] 的 Servlet.service() 在路径 [] 的上下文中抛出异常 [在第 81 行处理 JSP 页面 /changepwd_done.jsp 时发生异常

      e.printStackTrace();
 } finally {
     //con.close();
     con.commit();
 }

Stacktrace:] 有根本原因 java.sql.SQLException:当 autocommit=true 时无法调用 commit 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:933) 在 com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1635) 在 org.apache.jsp.changepwd_005fdone_jsp._jspService(changepwd_005fdone_jsp.java:160) 在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 在 java.lang.Thread.run(Thread.java:722)

【问题讨论】:

  • 代码似乎是正确的......你能打印错误的堆栈跟踪吗?并在此处粘贴堆栈跟踪
  • autocommit=true 时不能调用 commit 方法。删除该方法调用或先设置 autocommit=false,con.setAutocommit(false)
  • 是的,在您的 JSP 文件中删除该方法,commit,它将起作用。

标签: mysql database jsp


【解决方案1】:

捕获 SQLException 并检查控制台消息:

[...]

try {
    PreparedStatement ps = con.prepareStatement(sql);
    ps.setString(1, passc1);
    ps.setString(2, accid);
    i = ps.executeUpdate();
} catch (SQLException e) {
    e.printStackTrace();
}

【讨论】:

  • 我打赌 accountid 是一个整数,他说它是一个字符串。尽管如此,这个答案将帮助他找到解决方案。他不应该为延期写这样的评论。他应该使用适当的日志工具,如 log4j 或等效工具来为他管理日志。
  • 是的,我想是的。希望这能帮助他找出解决方案:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2011-03-05
相关资源
最近更新 更多