PreparedStatement for closable recordset and connection
Starting out with your first question: no, there isn't. But you may put the result set into another nested try block. Still not super-elegant, but a bit better in my opinion:

try (
    Connection connection = dataSource.getConnection();
    PreparedStatement statement = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
) {
    statement.setInt(1, page);
    statement.setInt(2, size);
    try (ResultSet rs = statement.executeQuery()) {
        while(rs.next()) {
            list.add(new StateEntity(rs.getString("stateId"), rs.getString("stateName")));
        }
    }


Regarding the method itself: why do you return an iterator instead of the list itself? This severely limits the capabilities of the return value without any benefit. (E.g. you cannot use size() or stream() which you could do with the list.)

Regarding the MySql class now:

Are you aware that you actually create an anonymous subclass with the map construction using curly braces and an object initializer? I never found this on par with the problem solved here. Fortunately, Java 9 brought us Map.of, so I recommend replacing this construct with 

private static Map&lt;String, String&gt; parameters = Map.of(
    "authReconnect", "true",
    ...
);


Regarding the query = ...stream...reduce...orElse: you can achive the same by simply using a joining collector:

String query = parameters.entrySet().stream()
    .map(p -&gt; p.getKey() + "=" + p.getValue())
    .collect(Collectors.joining("&amp;"));


The MySql class in itself is just global variables. This is "somewhat ok" as long as you don't employ advanced dependency injection possibilities like spring or a CDI container, but keep in mind that these globals are generally regarded as bad. Advice: read up on dependency injection, and see what options there are.