是关于MS SQL的数据库连接池的算法

解决方案 »

  1.   

    Context initCtx = new InitialContext();
       Context ctx = (Context) initCtx.lookup("java:comp/env");
       //获取连接池对象
       Object obj = (Object) ctx.lookup("jdbc/SqlServerDB");    
       //类型转换
       javax.sql.DataSource ds = (javax.sql.DataSource)obj;
       Connection conn = ds.getConnection();
       Statement stmt = conn.createStatement();
       String strSql = " insert into test(id,name) values('00001','fany')";
       stmt.executeUpdate(strSql);
       strSql = " select id,name from test ";
       ResultSet rs = stmt.executeQuery(strSql);
      

  2.   

    hoho
    不是调用而是自己写一个啦
    主要说一下该如何处理池子里的连接,如何判断连接是好的
    假如连接在使用过程中坏掉了,该如何处理没完成的工作,虽然知道没完成的工作要继续获得一个连接,但是如何判断正在使用的连接是坏的呢?
      

  3.   

    hoho
    不是调用而是自己写一个啦
    主要说一下该如何处理池子里的连接,如何判断连接是好的
    假如连接在使用过程中坏掉了,该如何处理没完成的工作,虽然知道没完成的工作要继续获得一个连接,但是如何判断正在使用的连接是坏的呢-- 这些问题 web server 都会解决的
      

  4.   

    package dbpool;
    import java.sql.*;public class ConnBean {
    private Connection conn = null;
    private boolean inuse = false;public ConnBean() {}public ConnBean(Connection con) {
    if (con != null)
    conn = con;
    }public Connection getConnection() {
    return conn;
    }public void setConnection(Connection con) {
    conn = con;
    }public void setInuse(boolean inuse) {
    this.inuse = inuse;
    }public boolean getInuse() {
    return inuse;
    }public void close() {
    try {
    conn.close();
    conn=null;
    } catch (SQLException e) {
    System.out.println(e.getMessage());
    }
    }
    }
    package dbpool;
    import java.sql.*;
    import java.util.*;
    public class PoolBean implements java.io.Serializable {
    private int poolsize = 5;
    private ConnBean connBean = null;
    private ConnParam cp=null;
    private Vector pool = null;
    private boolean isInit=false;
    public PoolBean() 
    {  
    }
    public PoolBean(ConnParam cp)
    {
    this.cp=cp;
    }
    public boolean getState()
    {
    return isInit;
    }
    public void setState(boolean isInit)
    {
    this.isInit=isInit;
    }
    public void setSize(int s) {
    if (s > 1 && !isInit)
    poolsize = s;
    }
    public int getSize() {
    return poolsize;
    }
    public void setConnBean(ConnBean cb) {
    if (cb != null) connBean = cb;
    }
    public ConnBean getConnBean() {
    return this.connBean;
    }
    public void setConnParam(ConnParam cp)
    {
    this.cp=cp;
    }
    private Connection createConnection() throws Exception {
      return DriverManager.getConnection(cp.getUrl(), cp.getUserName(),cp.getPassword()); 
    }public synchronized void initializePool() throws Exception {
    if (cp == null) cp=new HesConnParam();
    if (poolsize < 5) poolsize=5;
    try {
    Class.forName(cp.getDriver());
    for (int i = 0; i < poolsize; i++) {
    Connection con = createConnection();
    if (con != null) {
    ConnBean connBean = new ConnBean(con);
    addConnection(connBean);
    }
    }
    isInit=true;
    } catch (Exception e) {
    System.err.println(e.getMessage());
    throw new Exception(e.getMessage());
    }
    }private void addConnection(ConnBean connbean) {
    if (pool == null) pool = new Vector(poolsize);
    pool.addElement(connbean);
    }public synchronized void close(Connection con) {
    for (int i = 0; i < pool.size(); i++)
    {
    ConnBean connBean = (ConnBean)pool.elementAt(i);
    if (connBean.getConnection() == con) 
    {
    connBean.setInuse(false);
    break;
    }
    }
    }public synchronized Connection getConnection() throws Exception {
    ConnBean connBean = null;
    for (int i = 0; i < poolsize; i++)
    {
    connBean = (ConnBean) pool.elementAt(i);
    if (connBean.getInuse() == false)
    {
    connBean.setInuse(true);
    return connBean.getConnection();
    }
    }
    try
    {
    Connection con = createConnection();
    connBean = new ConnBean(con);
    connBean.setInuse(true);
    pool.addElement(connBean);
    poolsize++;

    catch (Exception e)
    {
    System.out.println(e.getMessage());
    throw new Exception(e.getMessage());
    }
    return connBean.getConnection();
    }public synchronized void emptyPool() {
    if(pool ==null) return;
    for (int i = 0; i < poolsize; i++)
    {
    ConnBean connBean = (ConnBean) pool.elementAt(i);
    if (connBean.getInuse() == false)
    {
    connBean.close();
    }
    else
    {
    try {
    java.lang.Thread.sleep(2000);
    connBean.close();
    } catch (InterruptedException ie) {
    System.err.println("关闭连接池出错:"+ie.getMessage());
    }
    }
    }


    }
    public void reSetPool()
    {
    emptyPool();
    pool.removeAllElements();
    poolsize = 5;
    connBean = null;
    cp=null;
    isInit=false;
    }
    }
    package dbpool;public abstract class ConnParam {
    public final String ORADRIVER="oracle.jdbc.driver.OracleDriver";
    public final String SQLSERVERDRIVER="com.microsoft.jdbc.sqlserver.SQLServerDriver";
    public abstract String getDriver();
    public abstract String getUrl();
    public abstract String getUserName();
    public abstract String getPassword();
    }
      

  5.   

    用这个吧,我专门为sqlserver和oracle写的