在tomcat中的配置绝对是正确的,而且我单独写了个test.jsp测试能访问到数据库,
但我多写了个类封装数据库访问就出问题了。。返回的connection=null;
请问这是怎么回事,代码如下:
package beans;import java.sql.*;
import javax.naming.*;
import javax.sql.*;
public class DatabaseBean {
        
 public static synchronized Connection getConnection(){
      DataSource ds=null;
      try{
      InitialContext ctx=new InitialContext();
       ds=(DataSource)ctx.lookup("java:comp/env/jdbc/test");
       return ds.getConnection();
      }catch(NamingException ex){
       ex.printStackTrace(System.err);
       return null;
      }
      catch(SQLException e){
       e.printStackTrace(System.err);
       return null;
      }
 }
 public static void close(ResultSet rs,Statement stat,Connection conn){
    if(rs!=null){
     try{
     rs.close();
     }catch(SQLException ex){
     ex.printStackTrace(System.err);
     }
    }
    if(stat!=null){
     try{
     stat.close();
     }catch(SQLException ex){
     ex.printStackTrace(System.err);
     }
    }
    if(conn!=null){
     try{
     conn.close();
     }
     catch(SQLException ex){
     ex.printStackTrace(System.err);
     }
    }
 }
 public static synchronized int getMaxID(Connection conn,String tablename){
     int nMaxID=0;
     try{
    Statement stat=conn.createStatement();
    String sql="Select maxid from tableseq where tablename='"+tablename+"'";
    ResultSet rs=stat.executeQuery(sql);
    while(rs.next()){
      nMaxID=rs.getInt(1);
    }
    rs.close();
    if(nMaxID>0){
     nMaxID++;
     sql="update tableseq set maxid='"+nMaxID+"' where tablename='"+tablename+"'";
         }else{
          nMaxID=1;
          sql="insert into tableseq values('"+tablename+"','"+nMaxID+"')";
         }
    stat.executeUpdate(sql);
    stat.close();     
    return nMaxID;
     }catch(SQLException ex){
      ex.printStackTrace(System.err);
      return -1;
     }
 }
}
test.jsp<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="BIG5"%>
<%@ page import="beans.DatabaseBean"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'MyJsp.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  
  <body>
   
   <%
      Connection conn=DatabaseBean.getConnection();
      Statement stat=conn.createStatement();
      ResultSet rs=stat.executeQuery("select * from tableseq");
      while(rs.next()){
       out.print("tablename="+ rs.getString("tablename"));
       out.print("<br>");
       out.print("maxid="+ rs.getInt("maxid"));
       DatabaseBean.close(rs,stat,conn);
      }
      if(conn==null) out.print("can't connect to db!");
   %>
  </body>
</html>问题:
org.apache.jasper.JasperException: Exception in JSP: /myjsp.jsp:3128:    
29:    <%
30:       Connection conn=DatabaseBean.getConnection();
31:       Statement stat=conn.createStatement();
32:       ResultSet rs=stat.executeQuery("select * from tableseq");
33:       while(rs.next()){
34:        out.print("tablename="+ rs.getString("tablename"));
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)root causejava.lang.NullPointerException
org.apache.jsp.myjsp_jsp._jspService(myjsp_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

解决方案 »

  1.   

    public static synchronized Connection getConnection(){
          DataSource ds=null;
          try{
         InitialContext ctx=new InitialContext();
          ds=(DataSource)ctx.lookup("java:comp/env/jdbc/test");
          return ds.getConnection();
          }catch(NamingException ex){
          ex.printStackTrace(System.err);
          return null;
          }
          catch(SQLException e){
          e.printStackTrace(System.err);
          return null;
          }
     }
    这个方法改一下
    public static synchronized Connection getConnection(){
          DataSource ds=null;
          try{
             // Obtain our environment naming context
             Context initCtx = new InitialContext();
             Context envCtx = (Context) initCtx.lookup("java:comp/env");
             // Look up our data source
             ds = (DataSource)envCtx.lookup("jdbc/test");
             return ds.getConnection();
          }catch(NamingException ex){
          ex.printStackTrace(System.err);
          return null;
          }
          catch(SQLException e){
          e.printStackTrace(System.err);
          return null;
          }
     }