2017-01-26 20 views
0

オープンとクローズのjdbc接続を担当するSQLConnectionというクラスがあります。いつも私は接続を開く必要があります、私はクラスの属性を充電するためにXMLファイルを読んで、次に私は接続を開きます。接続クラス、私はシングルトンを使うべきですか?

私はこのクラスにシングルトンのデザインパターンを作成し、コンストラクタのクラスでxmlファイルを読み込むことを考えています。

私は質問しています。どのアプローチが優れていて、何が最高のパフォーマンスを提供していますか?クラスに静的な知識を持たせるか、xmlを読み込んで毎回オブジェクトクラスを作成しますか?ああ、10〜100人のユーザーがいるWebアプリケーションです。ここで

は私がやってようなものです:

public class SQLConnection { 

    String url = ""; 
    String driver = ""; 
    String userName = ""; 
    String password = ""; 

    public Connection openConnection() { 

     Connection conn = null;  
     this.setAtributes();   

     try { 
      Class.forName(driver).newInstance(); 
      conn = DriverManager.getConnection(url, userName, password); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return conn; 

    } 


    public void closeConnection(Connection conn) { 
     try { 
      conn.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    //read a xml file that have database infos 
    public void setAtributes(){ 

     this.url = "lalala"; 
     this.userName = "lalala"; 
     this.password = "lalala"; 
     this.driver = "lalala";     
    } 
} 

をここで私がやりたいようなものです:

public class SQLConnection { 

    private static SQLConnection instance; 

    String url = ""; 
    String driver = ""; 
    String userName = ""; 
    String password = ""; 

    private SQLConnection() { 

    } 

    public static synchronized SQLConnection getInstance() { 
     if (instance == null) 
      instance = new SQLConnection(); 
      setAtributes(instance); 

     return instance; 
    } 

    public Connection openConnection() { 

     Connection conn = null;  

     try { 
      Class.forName(driver).newInstance(); 
      conn = DriverManager.getConnection(url, userName, password); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return conn; 

    } 

    //read a xml file that have database infos 
    public static void setAtributes(SQLConnection instance){ 

     instance.url = "lalala"; 
     instance.userName = "lalala"; 
     instance.password = "lalala"; 
     instance.driver = "lalala";  
    } 
} 
+2

代わりに実際の接続プールを使用してください。 – Kayaman

+1

**接続にシングルトンを使用しないでください**。接続プールを使用する。 – BackSlash

+2

最初の文章で停止している可能性があります。シングルトン、期間、あなたがなぜそれが最良の方法であるかを明言するまで、使用しないでください。 (それはほとんど決してありません。) – cHao

答えて

0

短い答え:ません

シングルトンが解決しましたリソース競合問題です。 SQL接続の場合、競合はなく、必要な数の接続を作成できます。シングルトンの使用の詳細については、こちらを参照してください。 What is so bad about singletons?

他にも、接続プールを使用する方がよいでしょう。接続プールでもパフォーマンスが向上します。 接続プールの利点について:Why we need a connection pooling for JDBC?

関連する問題