test.jsp
<%@ page language = "java" %>
<%@ page contentType = "text/html;charset=gb2312" %>
<%@ page import = "java.sql.*" %>
<%@ page import = "java.util.Vector" %>
<%@ page import = "com.hasons.beans.*" %><% Database db = new Database();
String sql = "select * from tbl_userinfo";
ResultSet rs = null; try
{
rs = db.executeQuery(sql); while(rs.next())
{
out.println(rs.getString(1));
}
}
catch(SQLException e)
{
out.println(e.toString());
}
%>
错误信息:
exception org.apache.jasper.JasperException
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)
root cause java.lang.NullPointerException
at org.apache.jsp.test_jsp._jspService(test_jsp.java:59)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)

解决方案 »

  1.   

    //错误应该在这里
    rs = db.executeQuery(sql);
    序列化一下,不能直接返回rs.
      

  2.   

    哦,楼上可以说清楚一点吗,
    你指的序列化是什么意思,我不是很清楚。同时我还不明白为什么在bean中使用相同的代码却没有错误。
      

  3.   

    比如把数据封装在ArrayList里返回,这就序列化了。
    道理就不说,也说不好:)
    试试。
      

  4.   

    try
    {
    rs = db.executeQuery(sSql);
    //加个非空判断,否则rs.next()会抛NullPoint Exception,因为rs对象有可能是空
    //然后再看打印出来的日志,步骤到达什么地方还是正确的,错在什么地方,很快就出来,至于arrayList序列化的问题
    //也不必要,也不能解决现在这个问题,我以前用Vector/arrayList封装的时候也会出现这个错误!
                               if(rs==null)
                               {
                                 //do what you want
                               }
                               else
                               {
     if(rs.next())
     {
    check = "not";
     }
     else
     {
    check = "ok";
     }
                               }
     System.out.println("result is " + check);
    }
    catch(Exception ex)
    {
    //出错处理
    System.err.println("错误信息User.checkUser():" + ex.getMessage());
    check = "err";
    }
      

  5.   

    //executeQuerty : for select recordset from table
    public ResultSet executeQuery(String sql)
    {
    rs = null;
    //建立与数据库的连接。
    try
    {
    //create connectin to the database
    conn = DriverManager.getConnection(dbURL,dbUser,dbPassword);
    Statement stmt = conn.createStatement();
    //execut query
    rs=stmt.executeQuery(sql);
    }
    catch(Exception ex)
    {
    System.err.println("Database.executeQuery:"+ex.getMessage());
    }
    return rs;
    }
    这个不能定义为public供jsp调用,可以对这个函数做下面的修改
    //executeQuerty : for select recordset from table
    public List executeQuery(String sql)
    {
    rs = null;
    List ls = new ArrayList(); 
    //建立与数据?的?接。
    try
    {
    //create connectin to the database
    conn = DriverManager.getConnection(dbURL,dbUser,dbPassword);
    Statement stmt = conn.createStatement();
    //execut query
    rs=stmt.executeQuery(sql); //get data
    while(rs.next()){
                                         //下面的一行是伪代码
                                         //如果rs的一行有多列的话,就要再定义一个javabean
    //ls.add(rs第一行的数据);
    }
    }
    catch(Exception ex)
    {
    System.err.println("Database.executeQuery:"+ex.getMessage());
    }
    return ls;
    }
      

  6.   

    具体原因,应该是上面说的串行话的问题,当这个函数不是返回到当前实例中的话,它的数据就丢掉了,所以public ResultSet executeQuery(String sql)只能定义为private
      

  7.   

    问题主要是:
    在javabean: User中,编写的getUserList返回总是为空,无论是ResultSet,Vector都是。
    在jsp中,直接使用:sql = "select * from tbl_userinfo";
    Database  db = new Database();
    ResultSet rs = db.executeQuery(sql);
    while(rs.next())
    {
       out.println(rs.getString(1));
    }
    也是一样不可以。我真的不太清楚到底是错在那个环节了。我不知道该如何解决?to  wdman(天空) :
    如果在javabean中,把函数定义为private,则在调用该类时,该方法无法使用。
      

  8.   

    对啊数,据就是因为getUserList(或者jsp)调用了另外一个类的返回ResultSet的函数,让那个函数返回List,具体代码我上面给了.这样数据就不会丢失.sql = "select * from tbl_userinfo";
    Database  db = new Database();
    List ls = db.executeQuery(sql);
    if(ls != null){
     for(int i=0; i<ls.size(); i++)
     {
         //访问list中的数据
      }
    }或者你要在jsp中定义
    Connection,Statement,ResultSet
    调用java.sql包里提供的方法来访问数据库(所有的都要在一个jsp页面中)另外:
    定义成private就算想让自己调用,不要给别人用,给别人用的东西要返回List.
      

  9.   

    加一些out.print看看具体在哪里出错.
      

  10.   

    问题解决了,给分。
    具体办法如下:
        要在jsp中访问数据库,需要把相关的jdbc桥的org,com两个文件夹拷贝到jsp所在的虚拟目录下的web-inf/classes中;或者把.jar文件放在web-inf/lib下。
        例如:我建立了虚拟目录:test,物理路径在D:\test下。如果我要在该目录及其子目录下的jsp中访问数据库,需要把org,com文件夹拷贝到D:\test\web-inf\classes下。
       然后就一切正常了。