数据库访问类最佳实践

时间:2015-06-24 12:14:59

标签: java database

我使用JDBC驱动程序为我的postgre数据库创建一个简单的DBHelper。

我想知道什么是最佳做法?

例如,initConnection() closeConnection()或其他任何方法都应该是静态方法吗?像:

void foo{
    DBHelper.initConnection();
    // do some logic, maybe:
    // Data someData = DBHelper.getSomeData();
    DBHelper.closeConnection();
}

或者更好,如果我将创建一个DBHelper对象并调用对象的方法。像:

void foo2{
    DBHelper dbhelper = new DBHelper();
    dbhelper.initConnection();
    // do some logic, maybe:
    // Data someData = dbhelper.getSomeData();
    dbhelper.closeConnection();
}

是否重要?

在尝试检索某些数据之前,是否需要始终检查连接是否已打开?怎么样呢?并始终尝试在finally块中关闭它?

编辑: 回答@Kayaman评论:

那么我的foo方法是这样的吗?

 void foo3{
    Connection conn = DBHelper.getConnection();
    // do some logic, maybe:
    // Statement statement = conn.createStatement();
    // some stmt work
    conn.close() //do i need check if stmt is closed before? 
}

这将使我的DBHelper类仅用于获取连接。里面没有逻辑? (例如GetInterestingRecords()GetRecordsWithId(30)

2 个答案:

答案 0 :(得分:1)

您是否考虑过在服务器配置文件中定义连接属性(如果它是一个Web应用程序)并在整个应用程序生命周期中打开会话?

答案 1 :(得分:1)

在实现DBHelper之前,您应该检查一些Java库是否可以满足您的需求。如果您查看this,会列出一些似乎适合您的问题的库。

如果您决定继续使用自己的自定义实现,我建议将DBHelper设置为普通类,而不使用静态方法来管理连接;主要原因是使用静态方法无法同时管理多个(即连接到不同数据库)数据库连接。如果您在onw库中使用java 7实现,您还可以实现tha AutoClosable inferface,以便更好地管理库管理的资源。