问题描述:
假如在上一个页面传来一个参数:
请输入年级:<input type="text" name="check" id="check" >
在当前页面读取:<table>
<%
//数据库已经连接
 String check =request.getParameter("check");
String sql="select count(*) as total from students where grade="+check;
rs =smt.executeQuery(sql);
while(rs.next()){
%>
<tr>
<td>
<%=rs.getString("total")%>
</td>
</tr>
</table>
<%}
conn.close();
rs.close();
smt.close();
%>
老是出错,请高手指教,加分!

解决方案 »

  1.   

    兄弟
    不知道出的是什么错??conn.close(); 
    rs.close(); 
    smt.close(); 数据库关闭的顺序建议是:rs.close(); 
    smt.close(); 
    conn.close(); 
      

  2.   

    楼主把报的错误贴出来看看单从上面代码来看,错误很可能是因为你查询获取数据时,类型不匹配造成的
    String check =request.getParameter("check"); 
    String sql="select count(*) as total from students where grade="+check; 
    你的check是String类型,而你的数据库中的字段类型是不是与之匹配啊
    楼主检查一下要是不行再说,关注
      

  3.   

    check是不是要加引号啊 'check',楼主试试看呢
      

  4.   

    建议:楼主
    1、用try{}catch(Exception e){e.printStackTrace();}把你写代码都包起来;这样可以定位具体哪行出错!
    2、重点检查数据连接conn是否获取了。
    3、建议将conn,stmt,rs等资源的清理放在finnally里处理
      

  5.   

    用try{}catch(Exception e){e.printStackTrace();}把你写代码都包起来;这样可以定位具体哪行出错!
    恩。
      

  6.   

    建议楼主拿些错误提示信息出来 , 我看你这条sql语句是查询出的int型的数据 ,用rs.getString("") 好像不合适吧
      

  7.   

    原代码: <body background="image/bkic017.gif">
    <%   Class.forName("com.mysql.jdbc.Driver").newInstance();
       String url="jdbc:mysql://localhost/charge?user=root&password=123";
       Connection conn =DriverManager.getConnection(url);
      Statement smt =conn.createStatement();
       ResultSet rs;  
       String sql;
      String check =request.getParameter("check");
      
      sql="select count(Snumber) as total1 from students where sfjf=1 and grade ="+check;
      rs =smt.executeQuery(sql);
    while(rs.next()){
      %>
      本年度所交总金额为: <%=rs.getFloat("total1")%>
      </body>
      </html>
      <%}
      
     rs.close();
     smt.close();
     conn.close();
      %>
    出错信息:
    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Exception in JSP: /countjf.jsp:2522:   String check =request.getParameter("check");
    23:   
    24:   sql="select count(Snumber) as total1 from students where sfjf=1 and grade ="+check;
    25:   rs =smt.executeQuery(sql);
    26: while(rs.next()){
    27:   %>
    28:   本年度所交总金额为: <%=rs.getFloat("total1")%>
    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root cause javax.servlet.ServletException: 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 '???ê??' at line 1
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    org.apache.jsp.countjf_jsp._jspService(countjf_jsp.java:91)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root cause java.sql.SQLException: 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 '???ê??' at line 1
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2975)
    com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
    com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
    com.mysql.jdbc.Connection.execSQL(Connection.java:2998)
    com.mysql.jdbc.Connection.execSQL(Connection.java:2927)
    com.mysql.jdbc.Statement.executeQuery(Statement.java:956)
    org.apache.jsp.countjf_jsp._jspService(countjf_jsp.java:70)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
      

  8.   

    加上catch后捕捉到的信息:
    org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 14 in the jsp file: /countjf.jsp
    Generated servlet error:
    rs cannot be resolvedAn error occurred at line: 31 in the jsp file: /countjf.jsp
    Generated servlet error:
    rs cannot be resolvedAn error occurred at line: 34 in the jsp file: /countjf.jsp
    Generated servlet error:
    rs cannot be resolvedAn error occurred at line: 34 in the jsp file: /countjf.jsp
    Generated servlet error:
    smt cannot be resolvedAn error occurred at line: 34 in the jsp file: /countjf.jsp
    Generated servlet error:
    conn cannot be resolved
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root cause org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 14 in the jsp file: /countjf.jsp
    Generated servlet error:
    rs cannot be resolvedAn error occurred at line: 31 in the jsp file: /countjf.jsp
    Generated servlet error:
    rs cannot be resolvedAn error occurred at line: 34 in the jsp file: /countjf.jsp
    Generated servlet error:
    rs cannot be resolvedAn error occurred at line: 34 in the jsp file: /countjf.jsp
    Generated servlet error:
    smt cannot be resolvedAn error occurred at line: 34 in the jsp file: /countjf.jsp
    Generated servlet error:
    conn cannot be resolved
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:328)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:414)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:297)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
      

  9.   

    小弟 愚见
     String check =request.getParameter("check"); 
      
      sql="select count(Snumber) as total1 from students where sfjf=1 and grade ="+check; 
      rs =smt.executeQuery(sql); 
     应该 这样写吧
     String check =request.getParameter("check"); 
      
      sql="select count(Snumber) as total1 from students where sfjf=1 and grade ="'+check+'""; 
      rs =smt.executeQuery(sql); 
    应该没问题 了  报的错事sql语句出问题了
      

  10.   


      String check =request.getParameter("check"); 
      sql="select count(Snumber) as total1 from students where sfjf=1 and grade ="'+check+'""; 
      rs =smt.executeQuery(sql); 
      

  11.   


    String check =request.getParameter("check"); 
      sql="select count(Snumber) as total1 from students where sfjf=1 and grade ="'+check+'""; 
      rs =smt.executeQuery(sql); 
      

  12.   

    对不起,刚才写错了,应该是 '"+check+"'"; 
      

  13.   

    如果check本来就是一个string类型,那么就没有必要加上引号给楼主两个建议
    1,在执行sql语句前,把生成的sql语句打印出来看看
    2,,先不使用参数,直接给check一个固定的值,检查数据库工作是否正常
      

  14.   

    rs cannot be resolved 
    这不是说你的rs没有初始化吗么
      

  15.   

    String check =request.getParameter("check"); 我感觉像 得到的 check  乱码了 
    java.sql.SQLException: 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 '???ê??' at line 1 
      

  16.   

    代码存在太多的问题try{
       ............
    }catch(Exception e){
       ......
    }finally{
        try{
            if(rs!=null){
               rs.close();
               rs=null;
            }
            if(st!=null){
               st.close();
               st=null;
            }
        }catch(){}finally{if(conn!=null&&!conn.isClosed()){conn.close();conn=null;}}
    }
    请自行加上该捕获的异常另外,jsp是由servlet输出的,所以乱码是正常的,最好用filter解决一下,还有你的rs变量没有声明