code: @SafeVarargs
      public final <T> T query(final Connection conn, final String sql, final StatementSetter statementSetter, final ResultExtractor<T> resultExtractor,
              final JdbcSettings jdbcSettings, final Object... parameters) {
          return query(null, conn, sql, statementSetter, new ResultSetExtractor<T>() {
              @Override
              public T extractData(Class<?> targetClass, NamedSQL namedSQL, ResultSet rs, final JdbcSettings jdbcSettings) throws SQLException {
                  return resultExtractor.extractData(rs, jdbcSettings);
              }
  
          }, jdbcSettings, parameters);
      }
docs: Remember to close the <code>ResultSet</code>, <code>Statement</code> and <code>Connection</code> if the return type <code>T</code> is <code>ResultSet</code> or <code>RowIterator</code>.
  
  If <code>T</code> is <code>RowIterator</code>, call <code>rowIterator.close()</code> to close <code>ResultSet</code>, <code>Statement</code> and <code>Connection</code>.
  <br></br>
  If <code>T</code> is <code>ResultSet</code>, call below codes to close <code>ResultSet</code>, <code>Statement</code> and <code>Connection</code>.
  
  <pre>
  <code>
  Connection conn = null;
  Statement stmt = null;
  
  try {
  stmt = rs.getStatement();
  conn = stmt.getConnection();
  } catch (SQLException e) {
  // TODO.
  } finally {
  JdbcUtil.closeQuietly(rs, stmt, conn);
  }
  </code>
  </pre>
  
  @param conn
  @param sql
  @param statementSetter
  @param resultExtractor
  @param jdbcSettings
  @param parameters
  @return