首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于JSP数据库连接池的有关问题-弄不出来真郁闷

2011-11-06 
关于JSP数据库连接池的问题-弄不出来真郁闷在网上看到的一个例子,我想连ACCESS数据库,弄不出来,现把代码贴

关于JSP数据库连接池的问题-弄不出来真郁闷
在网上看到的一个例子,我想连ACCESS数据库,弄不出来,现把代码贴出来:
网站根目录下     ConnPool.jsp   :
<%@   page   contentType= "text/html;   charset=GBK "   %>
<%@   page   import   = "java.sql.* "   %>
<jsp:useBean   id= "connManager "   scope= "page "   class= "mybean.DBConnManager "   />
<html>
<head>
<title>
购物商城首页
</title>
</head>
<body   bgcolor= "#B0C4DE ">
<center> <h1> 欢迎访问本购物商城 </h1> </center>
<%
String   accstr=request.getRealPath( "data/shopping.mdb ");     //设置路径
connManager.setConnStr(accstr);
Connection   connA=connManager.getConnection( "access ");
if   (connA==null)
{
    out.print( "数据库正忙,请稍后再访问 ");
}
Statement   stmtA=connA.createStatement();
String   sql= "select   *   from   userinfo ";
ResultSet   rs=stmtA.executeQuery(sql);
while   (rs.next())
{
out.print( " <table   border= '0 '> ");
out.print( " <tr> ");
out.print( " <td> "+rs.getString( "username ")+ " </td> ");
out.print( " <td> "+rs.getString( "userpass ")+ " </td> ");
out.print( " </tr> </table> ");
}
rs.close();
stmtA.close();
connManager.returnConnection( "access ",connA);
%>

</body>
</html>

网站根目录   WEB-INF\classes\   下两个JAVA文件:
DBConnPool.java   :

package   mybean;
import   java.util.*;
import   java.sql.*;
public   class   DBConnPool   {
    private   int   using=0;                     //正在使用连接的数量
    private   Vector   connections=new   Vector();                         //目前可用的连接数     private   int   maxconn=0;                 //最大连接数
    private   String   poolname= " ";         //连接池名
    private   String   dbid= " ";                 //数据库标识
    private   String   drivername= " ";     //驱动程序名
    private   String   username= " ";         //数据库帐号
    private   String   passwd= " ";             //数据库密码

    public   DBConnPool(String   poolname,String   dbid,String   drivername,
                                        String   username,String   passwd,int   maxconn){
        this.poolname=poolname;
        this.drivername=drivername;
        this.dbid   =dbid;
        this.username   =username;
        this.passwd=passwd;
        this.maxconn=maxconn;
    }

    /*将空闲连接返回给连接池*/
    public   synchronized   void   returnConnection(Connection   conn){


        connections.addElement(conn);             //将指定连接加到向量末尾
        using--;                                                       //连接用户减1
    }

    /*从连接池得到一个连接*/
    public   synchronized   Connection   getConnection(){
        Connection   conn   =   null;   //Connection是一个类,
              if   (connections.size()   >   0)   {
            conn   =   (Connection)   connections.elementAt(0);     //获取第一个连接    
            connections.removeElementAt(0);//获得一个连接,并将此连接从队列中删除.

            try   {
                if   (conn.isClosed())                   //如果此连接已关闭,刚继续获取
                    conn   =   getConnection();
            }
            catch   (Exception   e)   {
                e.printStackTrace();
            }
        }
            //如果实际使用的连接数小于最大连接数即有可用连接,就新增加一个连接
        else   if   (maxconn   ==   0   ||   using   <   maxconn){
            //如此时无可用连接(maxconn   ==   0)且连接数又未达到上限(using   <   maxconn)),就创建一个新连接
                conn=newConnection();
            }
            //如果连接数已达到上限就返回空指针
            if   (conn!=null){
                using++;
            }
        return   conn;
    }

/*创建新的连接*/
    public   Connection   newConnection(){
        Connection   conn=null;
        try{
            Class.forName(drivername);                         //加载驱动
            conn=DriverManager.getConnection(dbid,username,passwd);
        }catch(Exception   e){
            e.printStackTrace();
            return   null;
        }
        return   conn;
    }

  /*关闭所有连接*/
  public   synchronized   void   closeConn(){
      Enumeration   allConnections=connections.elements();
      while   (allConnections.hasMoreElements()){
          Connection   conn=(Connection)   allConnections.nextElement();
          try{
              conn.close();
          }catch(SQLException   e){


              e.printStackTrace();
          }
      }
      connections.removeAllElements();
  }
}

DBConnManager.java   :

package   mybean;
import   java.sql.*;
import   java.util.*;
import   mybean.DBConnPool;

public   class   DBConnManager   {
    Vector   poolnames   =new   Vector();             //连接池名列表
    Vector   drivernames=new   Vector();           //驱动程序名列表
    Vector   dbids=new   Vector();                       //数据库标识列表
    Vector   usernames=new   Vector();               //用户名列表
    Vector   passwds=new   Vector();                   //用户密码列表
    Vector   maxconns=new   Vector();                 //最大连接数列表
    Hashtable   connPools=new   Hashtable();     //连接池队列
    StringBuffer   AConnStr   =new   StringBuffer( "jdbc:odbc:driver={Microsoft   Access   Driver   (*.mdb)};DBQ= ");

        public   void   setConnStr(String   s)   //用于在JSP页中设ACCESS数据库文件路径
        {
                AConnStr.append(s);
        }

    public   DBConnManager()   {
        poolnames.addElement( "access ");                         //添加Access数据库的连接信息
        drivernames.addElement( "sun.jdbc.odbc.JdbcOdbcDriver ");
        dbids.addElement(AConnStr.toString());
        usernames.addElement( " ");
        passwds.addElement( " ");
        maxconns.addElement( "5 ");

        poolnames.addElement( "sqlserver2000 ");//添加SQL   Server数据库的连接信息
        drivernames.addElement( "com.microsoft.jdbc.sqlserver.SQLServerDriver ");
        dbids.addElement( "jdbc:microsoft:sqlserver://localhost:1433;DatabserName=shopping ");
        usernames.addElement( " ");
        passwds.addElement( " ");
        maxconns.addElement( "5 ");

          poolnames.addElement( "mysql ");                         //连接Mysql数据库信息
        drivernames.addElement( "org.gjt.mm.mysql.Driver ");  
        dbids.addElement( "jdbc:mysql://localhost/shopping ");
        usernames.addElement( " ");
        passwds.addElement( " ");
        maxconns.addElement( "5 ");

        poolnames.addElement( "oracle ");                       //连接Oracle8i/9i数据库
        drivernames.addElement( "oracle.jdbc.driver.OracleDriver ");


        dbids.addElement( "jdbc:oracle:thin:@localhost:1521:shopping ");
        usernames.addElement( " ");
        passwds.addElement( " ");
        maxconns.addElement( "5 ");

        createPools();       //创建连接池
    }
   
    /*创建连接池*/
    private   void   createPools(){
        for   (int   i=0;i <poolnames.size();i++)
        {
            String   poolname=poolnames.elementAt(i).toString();
            String   drivername=drivernames.elementAt(i).toString();
            String   dbid=dbids.elementAt(i).toString();
            String   username=usernames.elementAt(i).toString();
            String   passwd=passwds.elementAt(i).toString();
            int   maxconn=0;
            try{
                maxconn=Integer.parseInt(maxconns.elementAt(i).toString());
            }catch   (NumberFormatException   e){
                e.printStackTrace();
            }
            DBConnPool   pool=new   DBConnPool(poolname,drivername,dbid,username,
                                                                          passwd,maxconn);
            connPools.put(poolname,pool);
        }
    }

    /*得到一个指定连接池中的连接*/
    public   Connection   getConnection(String   name){
        DBConnPool   pool=(DBConnPool)   connPools.get(name);
        if   (pool!=null)
        {
            return   pool.getConnection();
        }
        return   null;
    }

    /*将连接返回给由指定的连接池*/
    public   void   returnConnection(String   name,Connection   conn){
        DBConnPool   pool=(DBConnPool)   connPools.get(name);
        if   (pool!=null)
        {
            pool.returnConnection(conn);
        }
    }

    /*关闭所有连接*/
    public   synchronized   void   closeConns(){
        Enumeration   allPools=connPools.elements();
        while   (allPools.hasMoreElements()){
            DBConnPool   pool=(DBConnPool)   allPools.nextElement();
            pool.closeConn();
        }
    }

}

我的ACCESS数据库为网站根目录下data\shopping.mdb



编译好之后,运行提示错误:java.lang.NullPointerException.........


[解决办法]
第一,别急
第二,做实验可以选一个简洁一点的例子

[解决办法]
还有空指针异常,汗!建议你多看看别人的连接代码!
都是一个道理的
[解决办法]
rg.apache.jsp.ConnPool_jsp._jspService(ConnPool_jsp.java:72)
这里错了,到你的WEB服务器下的缓存中找到ConnPool_jsp.java这个文件的72行看看
[解决办法]
我也遇到了:

现在还没解决!
[解决办法]
这个东西很麻烦,把人搞得要人命~~~ 楼主你还是慢慢等待吧,关注中!
[解决办法]
ACCESS这种文件型数据库能用连接池吗?
[解决办法]
ACCESS不支持多用户并发连接,所以连接池对它来说根本没用。
[解决办法]
找例程还是因简入繁,就象挑选英文阅读文章的原则是不认识的单词不能超过50%.
[解决办法]
learnning
[解决办法]
关注一下。。。
[解决办法]
不一定就是你的连接池出现问题,
首先看一下tomcat的log 包括启动日值都仔细看一遍。
日志是分析异常的最好方法,没有日志的话只能debug了

你那一点异常根本不能代表什么。肯定由其他原因导致你的tomcat 内部异常

[解决办法]
数据库用MYSQL吧!

热点排行