1. 已经在Tomcat/lib 放入了数据库驱动(.jar)
2.配置Tcocat/conf context.xml 里的配置  
3.代码如下   
<Resource name="jdbc/ownHome" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="sa" password = "1" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;DatabaseName=books"/>
4.
我创建了个servlet,去读取数据库。为了确保别的代码不出问题,我先写了个版本1,不用JNDI,而用servlet去读取数据库,可以正确地读取。加入JNDI之后,每次返回的结果集rs都是NULL。请教高手!
DBConnection类里面的关键方法:
public   DBConnection(){
  try { 

  Context ic = new InitialContext();
   DataSource soure = (DataSource)ic.lookup("java:comp/env/jdbc/books");
 dbConn= soure.getConnection();
   System.out.println("Connection Successful!");  //如果连接成功 控制台输出Connection Successful! 
   Statement   stmt   =   dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY) ;   
   String sql="select * from USERS";  
   rs= stmt.executeQuery(sql);  //这里的rs,每次读出来的都是null!
  } catch (Exception e) { 
   e.printStackTrace(); 
  }
 
}

解决方案 »

  1.   

    名字  java:comp/env/jdbc/booksjdbc/ownHome
      

  2.   

    dbConn= soure.getConnection();这里不报空指针 说明你已经连接成功 查不到数据 不太正常 建议检查 sql语句 和数据库中数据
    本人新手
      

  3.   

    新手挺厉害。
    我的servlet类是这样的。当connection 是直接从数据库中获得,没用JNDI的时候可以正常显示,那只能说明connection不正常吧?下面这段代码总是在while(rs.next())的时候报空指针异常,这说明rs就是空的。因为断定它是空的所以我没贴出来,但是既然你提到了
       req.setCharacterEncoding("gbk");
                resp.setCharacterEncoding("gbk");
                PrintWriter m_writer = resp.getWriter();
                DBConnection m_connection = new DBConnection();
                ResultSet rs= m_connection.getRs();
                {
                 try {
                 while(rs.next())
    m_writer.println(rs.getString(2));
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
                
                }
                m_connection.close();
      

  4.   

     m_connection.getRs();rs为null 说明这个方法返回的是null没有贴这个方法 这里面返回的是null  检查检查 这个方法 
      

  5.   

    public ResultSet getRs(){
    return rs;
    }
      

  6.   

    如果你context.xml配置文件里面的DatabaseName改成ownHome的话我感觉是没有什么问题的另外问一下,你是青鸟的吧!
      

  7.   

    <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>