已经在Tomcat/lib 放入了数据库驱动(.jar)
配置Tomcat/conf context.xml 里的配置   
代码如下  
<Context>
  <Resource name="jdbc/ownHome"    auth="Container" type="javax.sql.DataSource" maxActive="100"     maxIdle="30" maxWait="10000" username="sa" password="666666"    driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"     url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ownHome"/></Context>
DBConnection是这样写的:
public class DBConnection {
private Connection dbConn = null;  
private String s_name=null,s_password=null;
private Statement stmt=null;
private ResultSet rs=null;
public ResultSet getRs(){return rs;}
  public DBConnection(){
  Context initContext;
try {
initContext = new InitialContext();  Context envContext = (Context)initContext.lookup("java:/comp/env");
    
  DataSource ds = (DataSource)envContext.lookup("jdbc/ownHome");   dbConn = ds.getConnection();  
Statement stmt = dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY) ;   
String sql="select * from USERS";   
rs= stmt.executeQuery(sql);   
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
  }
public ResultSet getRs(){return rs;}
}
servlet是这样写的:
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
  int id=0;
PrintWriter m_writer = resp.getWriter();
ResultSet rs = null;
DBConnection m_connection = new DBConnection();
rs = m_connection.getRs();
try {
while(rs.next()){
id=rs.getInt(1);}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
m_writer.println(id);
}
报错:
type Exception reportmessage  description The server encountered an internal error () that prevented it from fulfilling this request.exception  java.lang.NullPointerException
servlet.testServlet.doGet(testServlet.java:42)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.报的异常是在while(rs.next()这一句,也就是说rs是空的,请问为什么? 
 

解决方案 »

  1.   

    你把代码的格式整理下,你就会发现问题了,getRs();
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    int id=0;
    PrintWriter m_writer = resp.getWriter();
    ResultSet rs = null;
    rs = getRs();
    try {
    while(rs.next()){
    id=rs.getInt(1); }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    m_writer.println(id);
    }
    我把doGet改成这样,没试过,你参考下吧
      

  2.   

    rs=getRs();就没有这个方法啊?我本来是在DBConnection里面写的,用构造函数初始化rs,然后用getRs()返回rs,都没初始化类怎么会有这个方法呢?大哥。
    拜托了,卡这里三天了,有人能指点下迷津吗?或者给个好用的 sql2005+tomcat6的JNDI连接配置和代码
      

  3.   

    你一步一步打印一下,看看conn有没有得到,然后是st,然后是rs
      

  4.   

    楼上方法我用了啊,不好用。rs = getRs();我是在对象里初始化的,这样直接写没法读啊。
      

  5.   

    sql server 2005:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ownHome是没有microsoft的,sql server 2000才有
     Context envContext = new initialContext();    
      DataSource ds = (DataSource)envContext.lookup("java:comp/env/jdbc/ownHome");