Я все еще работаю над той же проблемой, упомянутой здесь . Кажется, он работает нормально, особенно после создания класса 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 ().
Спасибо.