java中的数据库连接

时间:2013-05-28 10:36:58

标签: java database

首先,我向您展示代码,然后问几个问题。我有这样的类数据库连接(请忽略语法错误,如果有的话)

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 文件以获取非优化解决方案的凭据。你能告诉我哪种方法好,如果两者都更糟,请告诉我更有效的方法来创建和关闭数据库连接。

1 个答案:

答案 0 :(得分:5)

我发现了两个主要问题:

  • 所有内容(包括Connection对象)都是静态的这一事实意味着您不能同时在多个线程中使用此类。
  • 解析配置数据并打开连接是一个单独的问题,不应混淆。 至少将它们移动到单独的方法中,配置甚至可能会进入另一个类。

单独的第二件事就是避免多次解析连接信息。

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