Общая идея пула коннектов к базе данных состоит в том, чтобы заранее иметь несколько открытых коннектов, дабы не тратить времяна их открытие. Пул таким образом позволяет повысить скорость работы системы. Код | import java.sql.Connection; import java.sql.Statement; import java.sql.DriverManager; import java.sql.SQLException;
/** * Название говорит само за себя. */ final class ConnectionPool { private Connection[] c;//массив подключений private Statement[] s;//массив утверждений private boolean[] b;//флаги занятости утверждений private int size;//размер масиивов //переменные чтоб в методах не создавать private int i;//индекс массивов //----Конструктор------------------------------------------------------- private ConnectionPool(String driver, String url, String user, String password, int _size) throws ClassNotFoundException, SQLException { size=_size; c=new Connection[size]; s=new Statement[size]; b=new boolean[size]; Class.forName(driver); int i; for(i=0;i<size;i++){ c[i]=DriverManager.getConnection(url,user,password); s[i]=c[i].createStatement(); b[i]=false; } } //----Метод создания объекта-------------------------------------------- final ConnectionPool getInstance(String driver, String url, String user, String password, int size){ try{ Class.forName(driver); }catch(ClassNotFoundException e1){ return null; } try{ Connection c=DriverManager.getConnection(url,user,password); Statement s=c.createStatement(); s.close(); c.close(); }catch(SQLException e2){ return null; } try{ ConnectionPool cp=new ConnectionPool(driver, url, user, password, size); return cp; }catch(ClassNotFoundException e1){ return null; }catch(SQLException e2){ return null; } } //----Метод захвата утверждения----------------------------------------- final synchronized Statement getStatement(){ for(i=0;i<size;i++){ if(!b[i]){ b[i]=true; return s[i]; } } return null; } //----Метод освобождения утверждения------------------------------------ final synchronized boolean getBack(Statement _s){ for(i=0;i<size;i++){ if(s[i]==_s){ b[i]=false; return true; } } return false; } //----Метод для закрытия пула------------------------------------------- final synchronized boolean close(){ for(i=0;i<size;i++){ if(b[i]){ return false; } } boolean error=false; for(i=0;i<size;i++){ try{ s[i].close(); }catch(SQLException e1){ error=true; } try{ c[i].close(); }catch(SQLException e2){ error=true; } } return !error; } }
|
|