天天看點

jsp 資料連接配接池 2

 引用:http://bbs.hh010.com/thread-32010-2-1.html

//下面這兩個是連接配接池,下面兩個檔案都放在一個mybean的包裡.

  package mybean;

  import java.sql.*;

  import java.util.*;

  public class DBConnPool {

  //正在使用連接配接的數量

  private int using;

  //目前可用的連接配接數,即空閑連接配接

  private Vector connections=new Vector();

  //最大連接配接數

  private int maxconn;

  //連接配接池名

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

  /*從連接配接池得到一個連接配接*/

  public synchronized Connection getConnection(){

  Connection conn = null; //Connection是一個類,

  //connections是一個向量,用于存儲連接配接對象,它所存儲是的所有空閑狀态的可用連接配接

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

  return null;

  /*關閉所有連接配接*/

  public synchronized void closeConn(){

  Enumeration allConnections=connections.elements();

  while (allConnections.hasMoreElements()){

  Connection conn=(Connection) allConnections.nextElement();

  conn.close();

  }catch(SQLException e){

  connections.removeAllElements();

  public class DBConnManager {

  //連接配接池名清單

  private Vector poolnames =new Vector();

  //驅動程式名清單

  private Vector drivernames=new Vector();

  //資料庫辨別清單

  private Vector dbids=new Vector();

  //使用者名清單

  private Vector usernames=new Vector();

  //使用者密碼清單

  private Vector passwds=new Vector();

  //最大連接配接數清單

  private Vector maxconns=new Vector();

  //連接配接池隊列

  private Hashtable connPools=new Hashtable();

  public DBConnManager() {

  //添加Access資料庫的連接配接資訊

  poolnames.addElement("access");

  drivernames.addElement("sun.jdbc.odbc.JdbcOdbcDriver");

  dbids.addElement("jdbc

jsp 資料連接配接池 2

dbc:shopping");

  usernames.addElement("");

  passwds.addElement("");

  maxconns.addElement("5");

  //添加SQL Server2000資料庫的連接配接資訊

  poolnames.addElement("sqlserver2000");

  drivernames.addElement("com.microsoft.jdbc.sqlserver.SQLServerDriver");

  dbids.addElement("jdbc:microsoft:sqlserver://localhost:1433;DatabserName=shopping");

//連接配接Mysql資料庫資訊

  poolnames.addElement("mysql");

  drivernames.addElement("org.gjt.mm.mysql.Driver");

  dbids.addElement("jdbc:mysql://localhost/shopping");

  //連接配接Oracle8i/9i資料庫

  poolnames.addElement("oracle");

  drivernames.addElement("oracle.jdbc.driver.OracleDriver");

jsp 資料連接配接池 2

racle:thin

jsp 資料連接配接池 2

localhost:1521:shopping");

  //建立連接配接池

  createPools();

  /*将連接配接傳回給由指定的連接配接池*/

  public void returnConnection(String name,Connection conn){

  DBConnPool pool=(DBConnPool) connPools.get(name);

  if (pool!=null)

  {

  pool.returnConnection(conn);

  /*得到一個指定連接配接池中的連接配接*/

  public Connection getConnection(String name){

  return pool.getConnection();

  public synchronized void closeConns(){

  Enumeration allPools=connPools.elements();

  while (allPools.hasMoreElements()){

  DBConnPool pool=(DBConnPool) allPools.nextElement();

  pool.closeConn();

  /*建立連接配接池*/

  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;

  maxconn=Integer.parseInt(maxconns.elementAt(i).toString());

  }catch (NumberFormatException e){

  DBConnPool pool=new DBConnPool(poolname,drivername,dbid,username,

  passwd,maxconn);

  connPools.put(poolname,pool);

下面這個是首頁面.JSP檔案

  <%@ page contentType="text/html; charset=GBK" %>

  <%@ page import ="java.sql.*" %>

  <jsp:useBean id="connManager" scope="application" class="mybean.DBConnManager" />

  <html>

  <head>

  <title>

  購物商城首頁

  </title>

  </head>

  <body bgcolor="#B0C4DE">

  <center><h1>歡迎通路本購物商城</h1></center>

  <%

  //Connection connA=connManager.getConnection("access");

  Connection connS=connManager.getConnection("sqlserver2000");

  if (connS==null)

  %>

  資料庫正忙,請稍後再通路

  //Statement stmtA=connA.createStatement();

  Statement stmtS=connS.createStatement();

  String sql="select * from userinfo";

  ResultSet rs=stmtS.executeQuery(sql);

  while (rs.next())

  <tr>

  <td><%=rs.getString("username")%></td>

  <td><%=rs.getString("userpass")%></td>

  </tr>

  rs.close();

  stmtS.close();

  connManager.returnConnection("sqlserver2000",connS);

  </body>

  </html>