我使用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)
?
答案 0 :(得分:1)
您是否考虑过在服务器配置文件中定义连接属性(如果它是一个Web应用程序)并在整个应用程序生命周期中打开会话?
答案 1 :(得分:1)
在实现DBHelper之前,您应该检查一些Java库是否可以满足您的需求。如果您查看this,会列出一些似乎适合您的问题的库。
如果您决定继续使用自己的自定义实现,我建议将DBHelper设置为普通类,而不使用静态方法来管理连接;主要原因是使用静态方法无法同时管理多个(即连接到不同数据库)数据库连接。如果您在onw库中使用java 7实现,您还可以实现tha AutoClosable
inferface,以便更好地管理库管理的资源。