我应该坚持JDBC连接吗?

时间:2016-04-02 15:09:08

标签: 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 query to make sure there are no Nulls and then closes the connection );

等等。 我将这些常见的验证方法分发为集成测试人员的Jars。我的困境是我是否应该为每种方法打开和关闭连接,我不希望测试人员担心打开和关闭连接,只是担心调用验证方法。我正在寻找替代设计,或者这是足够好的东西。我担心的是,如果在测试套件中有10个测试,那么将有10个连接进行和关闭,这可能不是一个好兆头?我希望测试人员担心makig和关闭连接。它是基于Junit的测试框架,DB是Oracle。

2 个答案:

答案 0 :(得分:0)

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

如果他们决定重用连接,他们可以configure connection pool为此;如果他们决定每次都打开和关闭连接,他们可以在没有连接池的情况下配置框架。

您的任务减少为向他们提供支持技术。

答案 1 :(得分:0)

我通常会将DataSource传递给此类对象(构造函数)并获取每个业务方法的连接。在独立模式下,这可能意味着它没有使用正确的池,但是当你只执行一些没有问题的语句时。

在制作中,您可以传入真正的游泳池。保持数据源而不是连接的优点是,此方案具有更好的自我修复功能并减少活动连接的数量。 (在测试场景中可能不是那么重要,但whynot通常有可用的验证器。)

Validator(DataSource ds) {
    this.ds = ds;
}
validate(String val, ...) {
    try (Connection c = ds.getConnection()) {
        ...
    }
}

大多数驱动程序都有本机DataSource,但您也可以使用一个将getConnection()实现为return DriverManager.getConnection(url);的泛型。它也是一个容易模拟的小界面。

如果您的测试变得更大,则使用简单的池化数据源,例如Apache Commons DBCP DriverAdapterCPDS中的数据源。