Search code examples
javasonarqubesonarcloud

How can I resolve this issue on SonarCloud?


Using SonarCloud I got this bug:

Use try-with-resources or close this "ResultSet" in a "finally" clause

This is the following code:

public long executeUpdate() throws SQLException {
    if (query != null) {
        try {
            statement.execute();
            if (returnGeneratedKeys) {
                ResultSet resultSet = statement.getGeneratedKeys();
                if (resultSet.next()) {
                    return resultSet.getLong(1);
                }
            }
        } finally {
            statement.close();
            connection.close();
        }
    }
    return 0;
}

Solution

  • You may do this:

    public long executeUpdate() throws SQLException {
        if (query != null) {
            try {
                statement.execute();
                if (returnGeneratedKeys) {
                    try (ResultSet resultSet = statement.getGeneratedKeys()) {
                        if (resultSet.next()) {
                            return resultSet.getLong(1);
                        }
                    }
                }
            } finally {
                statement.close();
                connection.close();
            }
        }
        return 0;
    }
    

    The following structure:

    try (ResultSet resultSet = statement.getGeneratedKeys()) {
        if (resultSet.next()) {
            return resultSet.getLong(1);
        }
    }
    

    is equal to:

    ResultSet resultSet = statement.getGeneratedKeys()
    try {
        if (resultSet.next()) {
            return resultSet.getLong(1);
        }
    } finally {
        if (resultSet != null) {
            resultSet.close()
        }
    }