Закрытие MySQL подключений к базе данных в java - PullRequest
0 голосов
/ 29 мая 2020

У меня проблемы с тем, что мое программное обеспечение замедляется через несколько минут использования. Я понял, что проблемы могут быть из-за того, что у меня много связей, которые я не закрываю. У меня есть один класс java с моим подключением к базе данных, из которого я вызываю функцию подключения к различным частям программного обеспечения, которые мне нужны для выполнения запросов. Я не знаю, в какой момент мне следует закрыть свои соединения, потому что, если я пытаюсь закрыть после каждого запроса, я не могу повторно выполнить запрос, так как я получаю сообщение об ошибке «Запрос не может быть выполнен после закрытия соединения с базой данных». Когда я помещаю его в свой класс подключения к БД, сразу после входа в систему я не могу выполнить ни один запрос. В какой момент я должен поставить функцию закрытия db? Ниже приведен мой класс подключения.

public class databaseConnection {
   public static Connection connection(){
       Connection con = null;
       try{
           //test server
          //con = DriverManager.getConnection("jdbc:mysql://194.5.156.94:3306/u843360242_tukule?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","user","password");
          //real server 
        con = DriverManager.getConnection("jdbc:mysql://254gamers2.softether.net:3306/tukule_kwanza?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","user","password");
       //localhost server 
         //con = DriverManager.getConnection("jdbc:mysql://localhost:3306/tukule?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","root","password");
       }catch (SQLException ex) {
            try{
           //test server
          //con = DriverManager.getConnection("jdbc:mysql://194.5.156.94:3306/u843360242_tukule?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","user","password");
          //real server 
          con = DriverManager.getConnection("jdbc:mysql://kwanzatukule.ddns.net:3306/tukule_kwanza?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","user","password");
       }catch (SQLException x) {
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
        }
        }
       return con;
   } 
}

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

public ArrayList categoriesQuery() {
       String query2 = "SELECT * FROM category";
        ArrayList categories = new ArrayList();
    try {
            pst = connect.prepareStatement(query2);
            rs=pst.executeQuery();
            while(rs.next()){
                Object o[]={rs.getInt("id"),
                            rs.getString("Category_Name")
                            };
                categories.add(o);         
            }
          } catch (SQLException ex) {
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
        }
    return categories;
    }

В какой момент мне следует добавить функцию подключения к базе данных.

1 Ответ

1 голос
/ 29 мая 2020

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

public ArrayList categoriesQuery() {
       //your code
       Connection connect=null;
    try {
            connect = databaseConnection.connection();
            if(connect!=null){   
                //your code for database operations      
            }
          } catch (SQLException ex) {
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            if(connect!=null){
                connect.close();
            }
        }
    return categories;
}
...