在编程过程中出现了这样一个问题:
(但是在DB中已经定义了prepareStmt方法,参数也都没问题。不知道到底是出了什么问题)org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 17 in the jsp file: /ReplyDeal.jsp
The method prepareStmt(Connection, String) is undefined for the type DB
14: 
15: Connection conn = DB.getConn();
16: String sql = "insert into article values (null, ?, ?, ?, ?, now(), ?)";
17: PreparedStatement pstmt = DB.prepareStmt(conn, sql);
18: pstmt.setInt(1, pid);
19: pstmt.setInt(2, rootId);
20: pstmt.setString(3,title);
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:349)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:326)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

解决方案 »

  1.   

    你的DB里没有prepareStmt方法,如果有的话估计是你参数传错了。参数类型不对引起的
      

  2.   

    16: String sql = "insert into article values (null, ?, ?, ?, ?, now(), ?)";
    17: PreparedStatement pstmt = DB.prepareStmt(conn, sql);
    18: pstmt.setInt(1, pid);
    19: pstmt.setInt(2, rootId);
    20: pstmt.setString(3,title);
    18: pstmt.setInt(4, pid);
    19: pstmt.setInt(5, rootId);
    20: pstmt.setString(6,title);
    20: pstmt.setString(7,title);
    7个不同字段要写7个   不能这样写(null, ?, ?, ?, ?, now(), ?)";
      

  3.   

    method prepareStmt(Connection, String) is undefined for the type DB
    意思是你这个方法 在DB中没有找到匹配的 看看你传递的参数吧
      

  4.   

    这是我DB中的方法(参数好像也没有错啊 )
    public static PreparedStatement preparedStmt(Connection conn, String sql){
    PreparedStatement pstmt = null;
    try {
    pstmt = conn.prepareStatement(sql);
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return pstmt;

    }
      

  5.   

     错了  是prepareStmt
      

  6.   

    The method prepareStmt(Connection, String) is undefined for the type DB
    prepareStmt 这个方法在哪里定义的? 是否将该类导入到了jsp页面
      

  7.   

    prepareStmt封装到DB中了,也import到jsp中了
      

  8.   


    传递的类型不对啊,前边sql不是已经给定了null了嘛!!那怎么还会给set。
    如果有默认不填的信息,你最好把需要插入的列名写好,然后在传递。
      

  9.   

    prepareStmt与preparedStmt明显不一样嘛
      

  10.   

    The method prepareStmt(Connection, String) is undefined for the type DB
    也就是说在你的DB类里没有prepareStmt(Connection, String)这样的方法
    你的DB类里的方法是
    public static PreparedStatement preparedStmt(Connection conn, String sql){
    prepareStmtpreparedStmt,前者比后者少了一个d
      

  11.   

    将你的连接数据库的这段代码放在 main方法里去测试
      

  12.   

    改过来后还发生同样的错误,你确信报错是同一行?是不是其他地方还有同样的错误?
    你是重新发布jsp还是什么?可能要把工作目录中的原来被编译好的文件删掉
      

  13.   

    “17: PreparedStatement pstmt = DB.prepareStmt(conn, sql);”
    prepareStmt”打错了!!!!
      

  14.   

    如果不是每个字段都需插入数据,那么要把需要插入数据的字段列出来,另外,既然有些已有值,那么在预置参数的时候无需set
      

  15.   

    15: Connection conn = DB.getConn();
    16: String sql = "insert into article values (null, ?, ?, ?, ?, now(), ?)";
    17: PreparedStatement pstmt = DB.prepareStmt(conn, sql);
    18: pstmt.setInt(1, pid);
    19: pstmt.setInt(2, rootId);
    20: pstmt.setString(3,title);
    16行你的null是不是因为这个是自动编号之类的  如果是的话在insert里是不用写出来,写出来反而会有错!!!
    17改成PrepareStatement pstmt = con.prepareStatement(sql);
      

  16.   

    这坑爹的。。我也出现这个问题
    然后我关了myeclipse重启之后又没问题了。。不知道是什么原因。
    不过中间弹出了一个Hot Code Replace Failed - Add method not implemented我按了continue没理它
      

  17.   

    难道你的JSP里面没有导入DB所需要的类