Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пример реализации Connection Pool 
:(
    Опции темы
AntonSaburov
Дата 22.2.2005, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Общая идея пула коннектов к базе данных состоит в том, чтобы заранее иметь несколько открытых коннектов, дабы не тратить времяна их открытие. Пул таким образом позволяет повысить скорость работы системы.

Код

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

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.