1

最初にコードを示し、次にいくつかの質問をしました。私はこのようなクラスデータベース接続を持っています (もしあれば構文エラーを無視してください)

class DatabaseConnection {
private static Connection connection = null;
private static String driverName="";
private static String userName="";
private static String passwrod="";
private static String url="";

private DatabaseConnection() { }

public static void createConnection() {

    if ( connection  == null ) {
    // read database credentials from xml file and set values of driverName, userName, passowrd and url

    //create connection with database and set store this connection in connection object created a class level.
    }
}
public static void closeConnection1() throws Exception{
    if ( connection != null ) {
        connection.close();
        connection == null
    }

}

public static void closeConnection2() throws Exception{
    if ( connection != null ) {
        connection.close();
    }
}
public void insertData(Object data) {
    // insetData in database
}
}

データベース接続において、どちらの接続がより最適化されているかを知りたいです。このようなテストクラスがあるとしましょう

class Test {
public static void main(String args[]) {
    DatabaseConnection.createConnection();
    DatabaseConnection.insertData(data);
    DatabaseConnection.closeConnection2(); // we call also called close connection method within the insertData method after inserting the data

}
}

データベース接続を作成した後、データベースにデータを挿入し、closeConnection2メソッドを使用して接続を閉じます。このように接続は閉じられているので、さらにメソッドを挿入したい場合は、データベースとの接続を再作成する必要がありますが、接続オブジェクトがnullではなく、createConnectionがifステートメント内のコードを実行しなかったため、これを行うことはできません. 接続を閉じるためにcloseConnection1メソッドを呼び出した場合、これを行う際に、 xmlファイルを再度解析して資格情報を取得する必要がありますが、これは最適化ソリューションではありません。どちらの方法が良いか教えてください。両方とも悪い場合は、データベース接続を作成および閉じるためのより効率的な方法を教えてください。

4

1 に答える 1

5

これには2つの大きな問題があります。

  • すべて (Connectionオブジェクトを含む) が静的であるという事実は、一度に複数のスレッドからこのクラスを使用できないことを意味します。
  • 構成データの解析と接続を開くことは別の問題であり、混在させるべきではありません。少なくともそれらを別々のメソッドに移動すると、構成はおそらく別のクラスに入る可能性さえあります。

2 番目のことだけでも、接続情報を何度も解析する必要がなくなります。

さらに良いアプローチはDataSource、毎回接続を開く代わりに a を使用することです。そして、DataSource実際には接続プールである を使用してください!

于 2013-05-28T11:03:14.117 に答える