This implementation wraps a javax.sql.ResultSet, catching any SQLExceptions
and translating them to the appropriate Spring InvalidResultSetAccessException.

The passed-in ResultSets should already be disconnected if the SqlRowSet is supposed
to be usable in a disconnected fashion. This means that you will usually pass in a
javax.sql.rowset.CachedRowSet, which implements the ResultSet interface.

Note: Since JDBC 4.0, it has been clarified that any methods using a String to identify
the column should be using the column label. The column label is assigned using the ALIAS
keyword in the SQL query string. When the query doesn't use an ALIAS, the default label is
the column name. Most JDBC ResultSet implementations follow this new pattern but there are
exceptions such as the com.sun.rowset.CachedRowSetImpl class which only uses
the column name, ignoring any column labels. As of Spring 3.0.5, ResultSetWrappingSqlRowSet
will translate column labels to the correct column index to provide better support for the
com.sun.rowset.CachedRowSetImpl which is the default implementation used by
JdbcTemplate when working with RowSets.

Note: This class implements the java.io.Serializable marker interface
through the SqlRowSet interface, but is only actually serializable if the disconnected
ResultSet/RowSet contained in it is serializable. Most CachedRowSet implementations
are actually serializable, so this should usually work out.