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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Слишком много подключений к БД, в чем может быть проблема? 
V
    Опции темы
ЛунныйОборотень
Дата 29.3.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 12.11.2006

Репутация: нет
Всего: 1



Выскочило исключение- Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"

Попытался сделать задержку на секунду-не помогло.

Код

// poluchit spisok vsex detalei
public Collection<Detali> getAllDetails() throws SQLException
{
    Collection<Detali> details=new ArrayList<Detali>();
    Statement stmt=null;
    ResultSet rs=null;
    stmt=(Statement) con.createStatement();
    rs=stmt.executeQuery("SELECT ID,naimenovanie,price,kolichestvo,sklad,izgotovitel,capacity,dopusk,gruppaTKE,svobodnye FROM detali");
    while(rs.next())
    {
        Detali det=new Detali(rs);
        details.add(det);
Thread.sleep(1000);
    }
    if(rs!=null)
    {
        rs.close();
    }
    if(stmt!=null)
    {
        stmt.close();
    }
    return details;
}



а вызываю я в классе jFrame


Код

public jFrame() throws ClassNotFoundException, SQLException, InterruptedException {
        initComponents();
         getContentPane().setLayout(new BorderLayout());
        // Probyem polychit connect k MySQL
       ManagementSystem ms =ManagementSystem.getInstance();
       Vector  dt=null;
       Vector izg=null;
       dt=new Vector<Detali>(ms.getAllDetails()); // polychaiem spisok detalei

 JPanel top=new JPanel();
 top.setLayout(new FlowLayout(FlowLayout.CENTER));
   top.add(new JLabel("Tablitsa Detali"));
   top.setVisible(true);
   JPanel left = new JPanel();
        // Задаем layout и задаем "бордюр" вокруг панели
        left.setLayout(new BorderLayout());
        left.setBorder(new BevelBorder(BevelBorder.RAISED));
        left.add((new JLabel("Detali ")),BorderLayout.NORTH);
        detaliList=new JList(dt);
        left.add(new JScrollPane(detaliList),BorderLayout.CENTER);

   JPanel right = new JPanel();
    getContentPane().add(top, BorderLayout.NORTH);
    }
 


Как это исправить?И в чем причина?

Добавлено через 40 секунд
ПС- думаю задержка тут совсем не играет роли..
PM MAIL   Вверх
goodday1941
Дата 29.3.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: 8
Всего: 9



Ваш слип там вообще не в тему... более того он только мешает.. так как конекшн будет занят на n*1c, где n - колличество записей которое возвращается с базы..

а вообще у Вас не высвобождаются конекшины... там случайно попутных эксепшинов нет про которые Вы забыли упомянуть?

ну и если не трудно ManagementSystem  выложить в полном объеме там явно лажа сидит

Это сообщение отредактировал(а) goodday1941 - 29.3.2009, 19:13


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
ЛунныйОборотень
Дата 29.3.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 12.11.2006

Репутация: нет
Всего: 1



goodday1941, ManagementSystem собственно писал со студенческого отдела кадров Антона Сабурова...очень помогает,кстати  smile 
Если нужно ,могу выложить и остальные классы.


Код

/*
 *
 *
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package diplom1;

import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;

/**
 *
 * @author konstantin
 * 
 * 
 * izg- izgotovitel
 * izgotovitel- spisok
 * det-dostup k detaliam
 * details-kollektia 
 *
 *
 */
public class ManagementSystem {

    /**
     * @param args the command line arguments
     */

    private List izgotovitel;   // spisok  skladov
    private Collection details; // detali

    // staticheskaia peremennaia
    private static ManagementSystem instance;
    private static Connection con;
// load a driver MySQL
    private ManagementSystem() throws ClassNotFoundException, SQLException  {

        Class.forName("com.mysql.jdbc.Driver");

      String url = "jdbc:mysql://localhost:3306/diplom";

      con = DriverManager.getConnection(url,"root", "123");
        loadDetails();
        loadIzgotovitel();

    }

public static synchronized ManagementSystem getInstance() throws ClassNotFoundException, SQLException
{
    if(instance==null)
    {
        instance=new ManagementSystem();
    }
    return instance;
}
//  proveriaem est li izgotovitel i esli net to sozdaem
//dalee sozdaem neskolkix izgotovitelei i pomeshaem iz v kollektsiy
public void loadIzgotovitel()
{
    if(izgotovitel==null)
    {
        izgotovitel=new ArrayList();
    }
    else {
        izgotovitel.clear();

    }
    Izgotovitel izg=null;
    izg=new Izgotovitel();
    izg.setId(1);
    izg.setNaimenovanie("Izgotovitel1");
    izg.setAdress("Moskva");
    izg.setDirector("Petrov");
    izg.setMail("[email protected]");
    izg.setTelefon("323323");
    izgotovitel.add(izg);
}
// analogichno loadIzgotovitel()
 public void loadDetails()
 {
    if(details==null)
    {
     details=new TreeSet();
    }
    Detali det=null;
    det=new Detali();
    det.setId(1);
    det.setCapacity(22);
    det.setIzgotovitel("Izgotovitel1");
    det.setKolichestvo(222);
    float per=33;
    det.setPrice(per);
    det.setSklad(1);
    details.add(det);
 }


// poluchit spisok izgotovitelei
public List getIzgotovitel()
{
    return izgotovitel;
}
// poluchit spisok vsex detalei
public Collection<Detali> getAllDetails() throws SQLException, InterruptedException
{
    Collection<Detali> detailsAll=new ArrayList<Detali>();
    Statement stmt=null;
    ResultSet rs=null;
    stmt=(Statement) con.createStatement();
    rs=stmt.executeQuery("SELECT ID,naimenovanie,price,kolichestvo,sklad,izgotovitel,capacity,dopusk,gruppaTKE,svobodnye FROM detali");
    while(rs.next())
    {
        Detali det=new Detali(rs);
        detailsAll.add(det);
        Thread.sleep(1000);
    }
    if(rs!=null)
    {
        rs.close();
    }
    if(stmt!=null)
    {
        stmt.close();
    }
    return detailsAll;
}
// poluchit spisok detalei opredelennogo izgotovitelia

//ne zakoncheno
public Collection<Detali>getDetailsFromIzgotovitel(Izgotovitel izgotovitel) throws SQLException
{/*
    Collection l=new TreeSet();   // sozdaem kollektsiy
 for(Iterator i=details.iterator();i.hasNext();)
 {           // proxodimsia iteratorom po vsem elementam details (to est po vxodiashim v kollectsiy details
     // det.
     Detali det=(Detali) i.next();
        if(det.getId()==izgotovitel.getId())
        {
            l.add(det);
        }
 }
*/
    Collection<Detali> detali=new ArrayList<Detali>();
    PreparedStatement stmt=null;
    ResultSet rs=null;
// ne yveren
    stmt=(PreparedStatement) con.prepareStatement("SELECT ID,naimenovanie,price,kolichestvo,izgotovitel,capacity,dopusk,gruppaTKE,svobodnye FROM detali ");
    stmt.setInt(1, izgotovitel.getId());
    rs=stmt.executeQuery();
    while(rs.next())
    {
        Detali dett=new Detali(rs);
    }
    return detali;

}
/*
static String url = "jdbc:mysql://localhost:3306/diplom";
static String str="";
public static String Connect_to_MySQL() throws ClassNotFoundException, SQLException
{
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = (Connection) DriverManager.getConnection(url, "root", "123");
                    System.out.println("URL: " + url);
                     Statement stmt = (Statement) con.createStatement();

      ResultSet rs = stmt.executeQuery("SELECT * FROM detali");

      while(rs.next()) {

         str = rs.getString(1) + ":" + rs.getString(2);

        System.out.println(str);


}
       rs.close();

      stmt.close();

      con.close();
      return str;
}
 */
 public void insertDetali(Detali detali) throws SQLException

  {

    PreparedStatement stmt = (PreparedStatement) con.prepareStatement(

        "INSERT INTO detali "+

        "(ID, naimenovanie, izgotovitel, price, kolichestvo, dopusk, sklad,capacity,gruppaTKE,svobodnye) " +

        "VALUES (?, ?, ?, ?, ?, ?, ?)");

    stmt.setInt(1,detali.getId() );

    stmt.setString(3, detali.getIzgotovitel());

    stmt.setString(2, detali.getNaimenovanie());

    stmt.setFloat(4, detali.getPrice());
    stmt.setInt(5, detali.getKolichestvo());
    stmt.setInt(6, detali.getDopusk());

    stmt.setInt(7, detali.getSklad());

    stmt.setInt(8, detali.getCapacity());
    stmt.setString(9, detali.getGruppaTKE());
    stmt.setInt(10, detali.getSvobodnye());




    stmt.execute();

  }




    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // TODO code application logic here
jFrame f=new jFrame();
f.setVisible(true);
    }

}


PM MAIL   Вверх
goodday1941
Дата 29.3.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: 8
Всего: 9



ну все понятно... 

эта часть 
Код

    if(rs!=null)
    {
        rs.close();
    }
    if(stmt!=null)
    {
        stmt.close();
    }


должна присутствовать во всех методах обращения к бд... если их нет то конекшин остается "забитым"... и уже следующие методы которые обращаются к бд не могут получить доступа

Добавлено через 1 минуту и 12 секунд
к примеру в этом методе нет закрытие конекшина:

Код

 public void insertDetali(Detali detali) throws SQLException
  {
    PreparedStatement stmt = (PreparedStatement) con.prepareStatement(
        "INSERT INTO detali "+
        "(ID, naimenovanie, izgotovitel, price, kolichestvo, dopusk, sklad,capacity,gruppaTKE,svobodnye) " +
        "VALUES (?, ?, ?, ?, ?, ?, ?)");
    stmt.setInt(1,detali.getId() );
    stmt.setString(3, detali.getIzgotovitel());
    stmt.setString(2, detali.getNaimenovanie());
    stmt.setFloat(4, detali.getPrice());
    stmt.setInt(5, detali.getKolichestvo());
    stmt.setInt(6, detali.getDopusk());
    stmt.setInt(7, detali.getSklad());
    stmt.setInt(8, detali.getCapacity());
    stmt.setString(9, detali.getGruppaTKE());
    stmt.setInt(10, detali.getSvobodnye());
    stmt.execute();
  }



--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
ЛунныйОборотень
Дата 30.3.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 12.11.2006

Репутация: нет
Всего: 1



goodday1941, спасибо за помощь! smile 
Поставил везде try{}finally -во всех метожах кроме конструктора-иначе писал что невозможно выполнить операцию ,если соединение закрыто.
Закрыто  smile

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

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

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


 




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


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

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