【发布时间】:2015-09-10 15:19:55
【问题描述】:
我正在使用 JDBC 驱动程序为我的 postgre DB 创建一个简单的 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)?
【问题讨论】:
-
嗯,这是一个宽泛的问题,但我建议使用
getConnection()方法,它每次都返回一个新的Connection,而您只需在使用连接的代码中调用con.close();完成后。 -
@Kayaman 如果你可以检查我编辑的问题。无论如何,Ty 的回应! :)
-
创建
getRecordsWithId(int)没有多大意义。使用getUserById(int), getUserByLastName(String)等方法创建 DAO 类更有意义。业务逻辑不应转到辅助类。 -
@Kayaman 好的,这对我来说已经足够清楚了。静态/非静态问题怎么样?我上面写的代码正确吗?或者我应该创建一个对象?或者也许没关系?
-
这取决于您是否打算在其中保留状态,但使用静态方法可能会很好。