articleconn.jsp代码如下:
<%
   try {
     Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
     String url="oracle:jdbc:thin:@localhost:1521:news";
     String user="system";
     String pass="manager";
     Connection conn=DriverManager.getConnection(url,user,pass);
     Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                         ResultSet.CONCUR_UPDATABLE);
   }
   catch (Exception ex) {   }
%>
这是另一个JSP
<%@ include file="articleconn.jsp" %>
<%
   Cookie cookies[]=request.getCookies();
   if(cookies==null){
     response.sendRedirect("login.jsp");
   }
%>
<%
   ResultSet rs=stmt.executeQuery("select count(*) from learning");
   rs.next();
   System.out.println(rs.getInt(1));
%>为什么JB中报出"manage.jsp": cannot find symbol; symbol  : variable stmt, 
location: class org.apache.jsp.manage_jsp的错误,但是运行时候
System.out.println(rs.getInt(1));却可以正常打印出记录数,这是为什么啊

解决方案 »

  1.   

    这个没什么关系,因为JB中会自动检查语法错误,但是没有编译的时候,JB找不到 ResultSet rs=stmt.executeQuery("select count(*) from learning"); 这句话中的stmt,所以它认为是无效的变量,而当你运行时,会先运行<%@ include file="articleconn.jsp" %>,这些代码会被写入,stmt也就有了,所以是正常的,你不必管它,但是楼主,我不建议你这样做数据库记录的读取,你把这些数据库操作代码放到jsp中,你的jsp会很慢的
      

  2.   

    变慢似乎不会吧,放在servlet里面不一样在container中执行吗?只不过放在一起的话MVC就不能实现了
      

  3.   

    towang820208(高大威猛),你的解释有点问题哦。
    楼主之所以有这样的错误是因为在articleconn.jsp中你把定义在了try{}中了,你应该把它拿出来这样:
    Statement stmt = null;然后再
    try{
    ....
    stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                             ResultSet.CONCUR_UPDATABLE);
    .....
    }
      

  4.   

    拉丁情人的是正解,任何变量的定义都不能在try里的.但是,高大威猛的解释,虽然不是楼主的问题所在,也体现了一种常见问题.
      

  5.   

    System.out.println(rs.getInt(1));却可以正常打印出记录数,这是为什么啊?
    这是因为你把rs这个变量定义在了第二个JSP中了,没有定义在上一个JSP中的try中,当然可以取到值了。