你在1.jsp中的某个变量为空抛出来的异常而你在2.jsp中对那个变量赋值了?

解决方案 »

  1.   

    1.jsp
    <html>
    <head>
    <title>view all</title>
    </head>
    <body>
    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ page language="java" import="java.sql.*" %>
    <jsp:useBean id="database" scope="page" class="course.database"  />
    <%
    String sql = "select id,name from course";
    ResultSet rs = database.executeQuery(sql);
    %><%
    int i=0;
    String name="";
    int id=0;
    while(rs.next()) 
    {
    name=rs.getString("name");
    id=rs.getInt("id");
    out.println(name+rs);
             }
    %>
    </body>
    </html>database.java:package course;
    import java.sql.*;
    public class database 
    {
    String sDBDriver ="org.git.mm.mysql.Driver";
    String url="jdbc:mysql://localhost/course?user=mysql&password=mysql&useUnicode=true&characterEncoding=gb2312" ;
    Connection conn=null;
    Statement stmt=null;
    ResultSet rs=null;
    public database()
    {
    try {
    Class.forName("org.gi.mm.mysql.Driver").newInstance();
    }catch (ClassNotFoundException e) {
    System.out.println(e.getMessage());
    }catch (Exception ex) {
    System.out.println(ex.getMessage());
    }
    }
    public synchronized ResultSet executeQuery (String sql)
    {
    rs=null;
    try {
    conn = DriverManager.getConnection(url);
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
    }catch(SQLException e) {
    System.err.println(e.getMessage());
    }
    return rs;
    }
    public synchronized void executeUpdate(String sql)
    {
    stmt = null;
    rs = null;
    try {
    conn = DriverManager.getConnection(url);
    stmt = conn.createStatement();
    stmt.executeUpdate(sql);
    stmt.close();
    conn.close();
    }catch(SQLException e) {
    System.err.println(e.getMessage());
    }
    }
    }
    2.jsp
    <%@ page contentType="text/html;charset=gb2312"%>    
    <%@ page import="java.sql.*"%>
    <html>
    <body>
    <%
    Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    String url ="jdbc:mysql://localhost/course?user=mysql&password=mysql&useUnicode=true&characterEncoding=GB2312" ;
    Connection conn= DriverManager.getConnection(url);
    Statement stmt=conn.createStatement();
    String query="select name,id from course";
    ResultSet rs=stmt.executeQuery(query);
    while(rs.next())
    {
     String s=rs.getString("name");
             int id=rs.getInt("id");
             out.print(s+id+"<br>");
    }
    %>
    </body>
    </html>
      

  2.   

    out.println(name+rs);这句话是什么意思?
      

  3.   

    噢,是out.println(name+id);贴上去修改的时候改错了,原来的没有错的。不好意思
      

  4.   

    那可能就是你的rs.getString("name")或者rs.getInt("id")有空值,你把rs.getString("name")全部System.out.println出来看看。
      

  5.   

    rs.getString("name")和rs.getInt("id")不是空的,都是有输出的。况且我把1.jsp的
    这两行都注释掉,不输出东西,他都会有这样的错误。2.jsp他也是调用rs.getString("name")和rs.getInt("id"),但它输出的结果都没有是空。我猜想应该是bean的问题。
      

  6.   

    刚刚测试过,第一次1.jsp的时候得到的rs竟然是null的,所以有以上的错误。如果先运行了
    2.jsp之后,1.jsp的时候得到的rs就正常了,请问这是为什么?
      

  7.   

    org.apache.jsp.course.index_jsp._jspService(index_jsp.java:82)说明错误在index_jsp.java的82行,index_jsp.java在tomcat的work文件夹下,你可以看看82行是哪句话.呵呵!我猜也可能是bean的错误,不过这种看代码找错误有点费劲:)你把82的那句话贴出来看看.
      

  8.   

    我也想看,但index_jsp.java根本就没有82行那么多!!
    我实在找不出bean的错误。大家帮忙看看吧。!!为什么rs返回的是null值。
      

  9.   

    找到错误了,一个超低级的错误。org.git.mm.mysql.Driver应该是org.gjt.mm.mysql
    .Driver,bean里面写错了。所以永远不会class.forName成功,只有当2.jsp(里面写对
    了)运行时,才找到了那个driver,所以1.jsp也才可以运行。。
    太不好意思,浪费了大家这么多时间,自己真粗心。。可惜我只有50分,不然不会给
    更多的分的。太感谢了!!!