也要把sqlStmt关闭掉。jsp为:
<%@ page import="java.sql.*,java.util.*,DataBase,ReadDBConfig,Storage"%>
<html>
<head>
<title>
从存储过程中取数据
</title>
</head>
<body>
<%@ page contentType="text/html;charset=gb2312" %>
<jsp:useBean id="db" class="Storage" scope="page"></jsp:useBean>
<jsp:setProperty name="db" property="*"/>
<%
  String strname1="";
  String strwelcome="";
  String strmyname="";
  String strsql1="";
  String name=request.getParameter("name");
  strsql1 = "{call sp_jsptest(?)}";
  if (!name=null)
  {
strname1 = new java.lang.String(name.getBytes("ISO8859_1"),"gb2312"); 
  }else{
  //当name==null时,你应该做的处理
  }
  
  //strsql1和strname1都能够打印出来了
  //执行该存储过程并返回结果集 
  ResultSet sqlRst = db.transfer(strsql1,strname1);   //获取来自结果集中的数据 
  sqlRst.next();  //获取输出参数的值 
  strwelcome = sqlRst.getString(1); 
  strmyname = sqlRst.getString(2); 
  
  //关闭记录集 
  sqlRst.close(); 
 
%>
 
</body> 
</html>

解决方案 »

  1.   

    简单原因:sqlRst有可能为空。
    改正:将
    //获取来自结果集中的数据 
    sqlRst.next();
    //获取输出参数的值 
    strwelcome = sqlRst.getString(1); 
    strmyname = sqlRst.getString(2); 改为
    if (sqlRst.next())
    {
      //获取输出参数的值 
      strwelcome = sqlRst.getString(1); 
      strmyname = sqlRst.getString(2); 
    }
      给分吧,good luck!!!
      

  2.   

    try
    {
    ResultSet sqlRst = db.transfer(strsql1,strname1); 
    if(sqlRst == null)
    {
    System.out.println("This ResultSet is " + null);
    }
    }
    在jsp中对数据库操作也要放到try块内。
    怀疑没有正确得到sqlRst的对象。
      

  3.   

    假如:
    sqlRst.getString(1); 或者sqlRst.getString(2); 为空,你对他造操作时可能也产生空指针异常,所以给你一个方法。
       public String NullToSp(String Col) {
    if (Col == null)
    return "";
    else
    return Col.trim();
    }
    strwelcome = NullToSp(sqlRst.getString(1)); 
    strmyname = NullToSp(sqlRst.getString(2)); 
    就没有问题了,