Java 数据库访问类最佳实践

Java 数据库访问类最佳实践,java,database,Java,Database,我正在使用JDBC驱动程序为我的PostgreDB创建一个简单的DBHelper 我想知道什么是最佳实践 例如,像initConnection()closeConnection()之类的方法应该是静态的吗?比如: void foo{ DBHelper.initConnection(); // do some logic, maybe: // Data someData = DBHelper.getSomeData(); DBHelper.closeConnecti

我正在使用JDBC驱动程序为我的PostgreDB创建一个简单的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();
}
这有关系吗

在尝试检索某些数据之前,是否需要始终检查连接是否打开?如果很近呢?并始终尝试在
最后
块中关闭它

编辑: 在回答@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)

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

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


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

这是一个广泛的问题,但我建议使用
getConnection()
方法,该方法每次返回一个新的
连接
,您只需在完成连接后在使用该连接的代码中调用
con.close();
。@Kayaman,如果您可以检查我编辑的问题.Ty以获取响应!:)创建
getRecordsWithId(int)
没有多大意义。使用
getUserById(int)、getUserByLastName(String)
等方法创建DAO类更有意义。业务逻辑不应该转到帮助器类。@Kayaman-okey这对我来说已经足够清楚了。静态/非静态问题如何?我上面写的代码正确吗?或者我应该创建一个对象?或者可能没关系?这取决于你是否打算保持状态,但你可能会接受静态方法。是的,我在我的另一个项目中已经做过类似的smth,但这不是一个web应用程序,但这个想法与@Keyaman one完全不同,他建议在每次与DBYes交互之前打开连接,在每次交互之后关闭连接。是的,背后的想法是,客户机在应用程序生命周期中连接到数据库,而不是按需连接。静态/非静态的其他优点或缺点是什么?一些基本的jdbc util,如close(连接)、close(结果集)可以是静态的,但其他封装对象并将其包装(作为DBHelper withc datasource)的对象更好地设计为非静态的