Findbugs和SpotBugs无法检测到规则'ODR_OPEN_DATABASE_RESOURCE'

我正在下面的findbug和Spotbug中测试4条规则;

  • OBL_UNSATISFIED_OBLIGATION
  • OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE
  • ODR_OPEN_DATABASE_RESOURCE
  • ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH

有两种情况。一个被检测到违规,其他则没有。

  1. 检测到4个违规行为
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Resourceclosed {

    public List<String> getList(String[] args) throws Exception {
        
        Class.forName("org.postgresql.Driver");
        Connection connection = DriverManager.getconnection("jdbc:postgresql://127.0.0.1:5432/example","example","example");
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("select * from emp");
        
        List<String> results = new ArrayList<>();
        while (resultSet.next()) {
            results.add(resultSet.getString("ename"));
        }
        return results;
    }
}
  1. 检测到0个违规行为
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Resourceclosed {

    public List<String> getList(String[] args) throws Exception {
        
        Class.forName("org.postgresql.Driver");
        Connection connection = getconnection();
        Statement statement = getStatement(connection);
        ResultSet resultSet = getResultSet(statement);
        
        List<String> results = new ArrayList<>();
        while (resultSet.next()) {
            results.add(resultSet.getString("ename"));
        }
        return results;
    }

    private ResultSet getResultSet(Statement statement) throws SQLException {
        return statement.executeQuery("select * from emp");
    }

    private Statement getStatement(Connection connection) throws SQLException {
        return connection.createStatement();
    }

    private Connection getconnection() throws SQLException {
        return DriverManager.getconnection("jdbc:postgresql://127.0.0.1:5432/example","example");
    }
}

使用PMD,我可以在两种情况下检测到所有违规行为。
在Findbugs和SpotBugs中,在第二种情况下如何获得违规?

iCMS 回答:Findbugs和SpotBugs无法检测到规则'ODR_OPEN_DATABASE_RESOURCE'

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2031319.html

大家都在问