Я пытаюсь увидеть уязвимость моего кода с помощью fortify.В отчете говорится, что у меня есть проблема, в которой говорится, что «иногда функция не может освободить выделенный ресурс базы данных».Вот код и в какой строке указана проблема.Я пытался закрыть соединение в блоке finally, но это не решило проблему.Как это исправить?
private AnotherService anotherService;
private void create() {
Connection conn = null;
try {
conn = getCon(); // With fortify, there's an issue which said "the function sometimes fails to release a database resource allocated by", and it refers to this line
conn.setAutoCommit(false);
anotherService.myFunction(conn);
// the conn.commit() is inside anotherService, because I have to make one connection
// rest of code
} catch (Exception e) {
e.printStackTrace;
if (null != conn) {
conn.rollback();
}
} finally {
if (null != conn) {
conn.close();
}
}
}
private static Connection getCon() {
Connection connection = null;
try {
Class.forName("org.postgresql.Driver");
connection = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/dbname",
"username",
"password");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
Дополнение: Если я использую try-with-resource (например, try (Connection conn = getCon()
), чтобы автоматически закрывать вещи, как я могу вызвать conn.rollback () в блоке catchпроизошло ли какое-либо исключение?Поскольку переменная conn объявлена внутри try-with-resources.