我在JSP页面上调用一切正常.代码如下:
String drivers="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=www";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
String uid="sa";
String pass="m";
Class.forName(drivers).newInstance();
conn=DriverManager.getConnection(url,uid,pass);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);  
rs=stmt.executeQuery(sql);
while(rs.next())
{
}
能调出数据.可是做成BEAN(能连上数据库).再调用就会出现如下错误.java.lang.NullPointerException
rambler.CONN.QueryString(conn.java:48)
org.apache.jsp.index_jsp._jspService(index_jsp.java:53)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
Bean内容:package ramble;
import java.sql.*;
public class CONN {

String drivers="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=www_gjart_cn";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
String uid="sa";
String pass="m";
public void CONN(){

try{
Class.forName(drivers).newInstance();
}catch(java.lang.ClassNotFoundException e)
{
 System.err.println(e.getMessage());
}
catch(Exception ex)
{
 System.err.println(ex.getMessage());
} System.out.println(" 驱动加载成功!");
try{
   conn=DriverManager.getConnection(url,uid,pass);
}catch(SQLException e){
System.err.println(e.toString());
}
System.out.println("数据库连接成功!");
}
public ResultSet QueryString(String sql)
{
   try{
  stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);  
  rs=stmt.executeQuery(sql);
   }catch(SQLException e)
   {System.err.println("查询操作有问题了:"+e.toString());}
   return rs;
}JSP页面:
<jsp:useBean id="conn" class="ramble.CONN" scope="page"/>
<%
String sql="select *  from first_category";ResultSet rs=conn.QueryString(sql);
%>
为什么 rs.会为空呢.

解决方案 »

  1.   

    1.public void CONN() 这是什么, CONN 是类名 构造函数没有返回类型2.还有JavaBean的规范是每个属性都要有get/set方法这样写吧package ramble;
    import java.sql.*;
    public class CONN {

    String drivers="com.microsoft.jdbc.sqlserver.SQLServerDriver";
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=www_gjart_cn";

    public  CONN(){

    try{
             Connection conn=null;
    Statement stmt=null;
    ResultSet rs=null;
    String uid="sa";
    String pass="m";
    Class.forName(drivers).newInstance();
    }catch(java.lang.ClassNotFoundException e)
    {
     System.err.println(e.getMessage());
    }
    catch(Exception ex)
    {
     System.err.println(ex.getMessage());
    } System.out.println(" 驱动加载成功!");
    try{
       conn=DriverManager.getConnection(url,uid,pass);
    }catch(SQLException e){
    System.err.println(e.toString());
    }
    System.out.println("数据库连接成功!");
    }
    public ResultSet QueryString(String sql)
    {
       try{
      stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);  
      rs=stmt.executeQuery(sql);
       }catch(SQLException e)
       {System.err.println("查询操作有问题了:"+e.toString());}
       return rs;
    }
    }
    }
      

  2.   

    还是一样的错误呀.java.lang.NullPointerException为什么 rs 会返回空值呢?
      

  3.   

    如果并发操作, 同一个conn打开多个statement在SQLServer是不被允许的, 一旦新的内容打开, 原来的ResultSet内容被清空, 因此没有数据.