Java 我是否应该保持JDBC连接?

Java 我是否应该保持JDBC连接?,java,jdbc,Java,Jdbc,对于我的集成测试,我构建了一个公共验证类,它有如下方法 public void countcheck(table1, table 2){ // makes a JDBC connection and run the query to check counts and then closes the connection }; public void nullcheck(Table, ColumnName) {// makes a JDBC connection and the run quer

对于我的集成测试,我构建了一个公共验证类,它有如下方法

public void countcheck(table1, table 2){ // makes a JDBC connection and run the query to check counts and then closes the connection };

public void nullcheck(Table, ColumnName) {// makes a JDBC connection and the run query to make sure there are no Nulls and then closes the connection );
等等。 我将这些常见的验证方法作为JAR分发给集成测试人员。我的困境是我是否应该为每个方法打开和关闭连接,我不想让测试人员担心打开和关闭连接,而只是担心调用验证方法。我正在寻找替代设计或这是一些足够好的东西。我担心的是,如果一个测试套件中有10个测试,那么会有10个连接在运行和关闭,这可能不是一个好迹象?我希望测试人员担心建立和关闭连接。它是一个基于Junit的测试框架,DB是Oracle。

您不应该将处理DB连接的决定“硬塞进”代码中。相反,您应该将此决定推迟到部署您的框架的人员

如果他们决定重用连接,他们可能会为此付出代价;如果他们决定每次打开和关闭连接,他们可以配置框架而不需要连接池


您的任务简化为向他们提供使能技术

我通常将
数据源
传递到这些对象(构造函数)中,并获得每个业务方法的连接。在独立模式下,这可能意味着它没有使用适当的池,但当您只执行一大堆语句时,这是没有问题的

在生产中,您可以通过一个真正的池。与连接相比,保留数据源的优势在于,此场景具有更好的自愈能力,并减少活动连接的数量。(这在测试场景中可能不那么重要,但为什么没有通用的验证器)

大多数驱动程序都有一个本机数据源,但您也可以有一个genericone,它实现getConnection()以
返回DriverManager.getConnection(url)。它也是一个易于模仿的小界面


如果您的测试变得更大,您可以使用一个简单的池数据源,比如来自Apache Commons DBCP的数据源。

您的问题不是很清楚。如果您担心创建/释放连接,连接池将使其变得非常快。@BhaskarMishra为什么不使用连接池来获取连接呢?谢谢,我对此有点陌生,连接池是有意义的,所以我将在测试人员开始测试时创建一个池。
Validator(DataSource ds) {
    this.ds = ds;
}
validate(String val, ...) {
    try (Connection c = ds.getConnection()) {
        ...
    }
}