我的sql语句是String sql = "insert into guestbook values(gu_sqe.nextval,?,?,?,?,?,?)";
param 为Object param[]={name,StringUtil.changeNull(request.getParameter("email"),"未填"),StringUtil.changeNull(request.getParameter("phone"),"未填"),title,request.getParameter("content"),request.getParameter(sdf.format(new java.util.Date()))};
第61行是result = qr.update(sql, param);前面还有一个
2010-9-4 7:24:20 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
严重: A web application registered the JBDC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
这是什么意思该怎么解决??
java.sql.SQLException: Too many parameters: expected 0, was given 6 Query: insert into guestbook values(gu_sqe.nextval,?,?,?,?,?,?) Parameters: [?????÷, [email protected], 15838310767, ????, <p>
????</p>
, null]
at org.apache.commons.dbutils.QueryRunner.rethrow(QueryRunner.java:542)
at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:599)
at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:655)
at com.v512.AddMessageServlet.doPost(AddMessageServlet.java:61)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
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:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
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:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)

解决方案 »

  1.   

    你数一下你的sql语句的参数数是不是有六个问号,但是你的params【】里头有七个参数!
      

  2.   

    是六个问号呀!而且params[]中也是六个参数。StringUtil中的changeNull是个静态的方法,是把空值换为后面的参数的。
      

  3.   

    我的AddMessageServlet的代码是:(使用的是tomcat连接池)
    package com.v512;import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.SQLException;
    import java.text.SimpleDateFormat;import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.sql.DataSource;import org.apache.commons.dbutils.QueryRunner;public class AddMessageServlet extends HttpServlet { private static final long serialVersionUID = 966157472934539285L; public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { doPost(request, response);
    } public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String name = null;
    String title = null;
    out
    .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
    out.println("<HTML>");
    out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    out.println("  <BODY>");
    int result = 0;
    name = StringUtil.filterHtml(request.getParameter("name"));
    title = StringUtil.filterHtml(request.getParameter("title"));
    String sql = "insert into guestbook values(gu_sqe.nextval,?,?,?,?,?,?)";
    if (StringUtil.validateString(name)) {
    out.println("对不起,你输入的名字为空,请重新输入<br>");
    out.println("<a href ='/guestbook1/addMessage.htm'>添加留言 </a>");
    }
    if (StringUtil.validateString(title)) {
    out.println("对不起,你输入的主题为空,请重新输入<br>");
    out.println("<a href ='/guestbook1/addMessage.htm'>添加留言 </a>");
    } try {
    Context context = new InitialContext();
    DataSource ds = (DataSource) context
    .lookup("java:/comp/env/jdbc/oracleds");
    QueryRunner qr = new QueryRunner(ds);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Object[] params=new Object[]{name,StringUtil.changeNull(request.getParameter("email"),"未填"),StringUtil.changeNull(request.getParameter("phone"),"未填"),title,request.getParameter("content"),request.getParameter(sdf.format(new java.util.Date()))};
    result = qr.update(sql, params);
    if(result==0){
    out.println("对不起,你输入的内容为空,请重新输入<br>");
    out.println("<a href ='/guestbook1/addMessage.htm'>添加留言 </a>");
    }else{
    out.println("恭喜留言添加成功<br>");
    out.println("<a href ='/guestbook1/addMessage.htm'>添加留言 </a><br>");
    out.println("<a href = '/guestbook1/servlet/getMessage'>查看留言</a>");
    }
    } catch (NamingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } out.println("  </BODY>");
    out.println("</HTML>");
    out.flush();
    out.close();
    }}
      

  4.   

    这个问题我已经解决了,原来是commons-dbutils 的问题1.3jar不行,要用1.1jar才行。
      

  5.   

    gu_sqe.nextval,也算一个参数啊!应该是ID吧!你后面又是6个问号,一个七个参数,你说你问题1.3jar不行,要用1.1jar才行。7对6怎么行!
      

  6.   

    QueryRunner 中的query(sql,params)是用params中的参数替换sql中的占位符的,sql中有6个?号,params中有6个值,一一对应。sqlgu_sqe.nextval的确是id,但它在数据库中已经存在。
      

  7.   

    我感觉不是参数的问题。那个id值不应算为一个占位符,所以六对六还是正确的
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    String title = request.getParameter("title");
    String category_id = request.getParameter("category");
    String content = request.getParameter("content");

    String params[] = {title, content, category_id};
    DataSource ds = null;
    int result = 0;
    try {
    Context cont = new InitialContext();
    ds = (DataSource) cont.lookup("java:/comp/env/jdbc/mysqlds");
    } catch (Exception e) {
    System.out.println("link error");
    }
    try {
    String sql = "insert into blog(title,content,category_id,createdtime) "
    + "values(?,?,?,now())";
    QueryRunner qr = new QueryRunner(ds);
    result = qr.update(sql,params); } catch (SQLException e) {
    e.printStackTrace();
    }
    String message="";
    if(result==1){
    message = "添加博文成功!";
    }else{
    message = "添加博文失败";
    }
    request.setAttribute("message", message);
    RequestDispatcher disp = request.getRequestDispatcher("/success.jsp");
    disp.forward(request,response);
    就像这里的代码似得,没什么问题的。有可能是jar包的问题