私はまだ同じ問題の言及に取り組んでいます here . 以下に示す 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;
}
}
}
上記の以前の質問へのリンクに、ストアド プロシージャとシングルトン パターンの実装を既に投稿しました。
アプリケーションの速度が低下するだけなので、データ トランザクションごとにデータベースへの接続を閉じる必要はないという印象を受けました。私が構築しているこのシステムのユーザー数は約 30 人なので、パフォーマンスと使いやすさが重要です。
少なくとも 3 ~ 4 データ トランザクションの接続を延長することは正しいですか? 例えば。何らかのフォームのユーザー入力に対する検証チェック、またはGoogleの自動提案に似たもの...これらはすべて、ユーザー入力に基づいて保存された個別の関数呼び出しです。各データ トランザクションの後に接続および切断する代わりに、1 つの接続インスタンスを使用できますか? どちらがより効率的ですか?
私の仮定が正しければ (1 つの接続インスタンスを使用する方が効率的です)、接続の開閉はコントローラーで処理する必要があります。そのため、createConnection() メソッドと closeConnection() メソッドを作成しました。
ありがとう。