Эффективность Java JDBC :Как долго должно поддерживаться соединение?

Я все еще работаю над той же проблемой, упомянутой здесь . Кажется, он работает нормально, особенно после создания класса AbstractModel, показанного ниже :

public abstract class AbstractModel {

    protected static Connection myConnection = SingletonConnection.instance().establishConnection();
    protected static Statement stmt;
    protected static ResultSet rs;

    protected boolean loginCheck;                   // if userId and userLoginHistoryId are valid - true, else false
    protected boolean userLoggedIn;                 // if user is already logged in - true, else false

    public AbstractModel (int userId, Long userLoginHistoryId){
        createConnection();                                 // establish connection
            loginCheck = false;
        userLoggedIn = false;
        if (userId == 0 && userLoginHistoryId == 0){        // special case for login
            loginCheck = true;                              // 0, 0, false, false
            userLoggedIn = false;                           // set loginCheck to true, userLogged in to false
        } else {
            userLoggedIn = true;
            try{
                String query = "select \"user_login_session_check\"(" + userId + ", " + userLoginHistoryId + ");";
                System.out.println("query: " + query);
                stmt = myConnection.createStatement();
                rs = stmt.executeQuery(query);
                while (rs.next()){
                    loginCheck = rs.getBoolean(1);
                }
            } catch (SQLException e){
                System.out.println("SQL Exception: ");
                e.printStackTrace();
            }
        }

    }
    // close connection
    public void closeConnection(){
        try{
            myConnection.close();
        } catch (SQLException e){
            System.out.println("SQL Exception: ");
            e.printStackTrace();
        }

    }
    // establish connection
    public void createConnection(){
        myConnection = SingletonConnection.instance().establishConnection();
    }

    // login session check
    public boolean expiredLoginCheck (){
        if (loginCheck == false && userLoggedIn == true){
            closeConnection();
            return false;
        } else {
            return true;
        }
    }

}

. Я уже разместил хранимые процедуры и реализацию шаблона Singleton в ссылке на предыдущий вопрос выше.

У меня сложилось впечатление, что мне не нужно закрывать соединение с базой данных после каждой отдельной транзакции данных, так как это просто замедлит работу приложения. Я ищу около 30 пользователей для этой системы, которую я создаю, поэтому важны производительность и удобство использования.

Правильно ли продлить соединение как минимум на 3 -4 транзакции данных? Например. Проверка правильности ввода пользователя для какой-либо формы или что-то похожее на автоматическое -предложение Google... Все это отдельные сохраненные вызовы функций, основанные на вводе пользователя. Могу ли я использовать один экземпляр подключения вместо подключения и отключения после каждой транзакции данных? Что эффективнее?

Если мои предположения верны (, эффективнее использовать один экземпляр соединения ), тогда открытие и закрытие соединения должны обрабатываться в контроллере, поэтому я создал методы createConnection ()и closeConnection ().

Спасибо.

5
задан Community 23 May 2017 в 12:00
поделиться