A ResultSet maintains a cursor pointing to its current row of
 data. Initially the cursor is positioned before the first row.
 The 'next' method moves the cursor to the next row.
 
 
 The getXXX methods retrieve column values for the current
 row. You can retrieve values using either the index number of the
 column. Columns are numbered from 1.
 
 
 For maximum portability, ResultSet columns within each row should be
 read in left-to-right order and each column should be read only once.
 
 
 For the getXXX methods, the SDBC driver attempts to convert the
 underlying data to the specified type and returns a suitable
 value.
 
 
 Column names used as input to the findColumn method are case
 insensitive. When several columns have the same name, then the value
 of the first matching column will be returned. The column name option is
 designed to be used when column names are used in the SQL
 query. For columns that are NOT explicitly named in the query, it
 is best to use column numbers. If column names are used, there is
 no way for the programmer to guarantee that they actually refer to
 the intended columns.
 
 
 A ResultSet is automatically closed (disposed) by the Statement that
 generated it when that Statement is closed, re-executed, or used
 to retrieve the next result from a sequence of multiple results.
 
 
 The number, types, and properties of a ResultSet's columns are
 provided by the ResultSetMetaData object returned by the getMetaData
 method.