A common solution is to populate one or more Value Objects with the contents of the ResultSet. The Value Objects need to be serializable classes.
The problem with passing a ResultSet is that, in order to pass an object from the server to the client, the object needs to be serializable. However, since ResultSet defines only an interface, you can't guarantee whether or not the implementation of the ResultSet is serializable or not. This could easily change between vendors, so your app loses it's portability.