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方法关闭连接。以这种方式连接已经关闭,所以如果我想插入更多方法,那么我必须重新创建与数据库的连接,但我不能这样做,因为连接对象不为空并且createConnection没有执行 if 语句中的代码. 现在,如果我调用closeConnection1方法来关闭连接,那么在执行此操作时,我必须再次解析xml文件以获得凭证,这不是优化解决方案。你能告诉我哪种方法好,如果两者都更糟,那么请告诉我创建和关闭数据库连接的更有效方法。

4

1 回答 1

5

我看到了两个主要问题:

  • 一切(包括Connection对象)都是静态的这一事实意味着您不能一次从多个线程中使用此类。
  • 解析配置数据和打开连接是独立的问题,不应混为一谈。至少将它们移动到单独的方法中,配置甚至可能进入另一个类。

仅第二件事就可以避免多次解析连接信息。

更好的方法是使用 aDataSource而不是每次都打开连接。然后使用一个DataSource实际上是一个连接池!

于 2013-05-28T11:03:14.117 回答