我正在下面的findbug和Spotbug中测试4条规则;
- OBL_UNSATISFIED_OBLIGATION
- OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE
- ODR_OPEN_DATABASE_RESOURCE
- ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH
有两种情况。一个被检测到违规,其他则没有。
- 检测到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;
}
}
- 检测到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中,在第二种情况下如何获得违规?