Эффективность 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 ().
Благодарю.