What's in the name ...
Indeed, a ResultSet and a database cursor are semantically similar. The SQL: 2011 standard defines:
A cursor is a mechanism by which table rows can act (for example, return to the host programming language) one at a time.
This is very similar to a ResultSet . Further, the SQL: 2011 standard continues and is mentioned:
The cursor declaration descriptor and result set descriptor have four properties: a sensitivity property (either SENSITIVE, INSENSIVE, or ASENSITIVE), a scroll property (either SCROLL, or NO SCROLL), a holdability property (either WITH HOLD, or WITHOUT HOLD), and a return property (either WITH RETURN, or WITH RETURN).
In other words, none of these features has been “invented” by specialized JDBC (or ODBC) teams. They exist exactly in this form in many SQL database implementations, and, as with any specification, many of the above functions are optional in SQL implementations.
You got an authoritative answer to the MySQL part already with Jess . I would like to add that JDBC, like any high-level specification, has parts that are required and parts that are optional.
Looking at the JDBC Spec , I see the following relevant parts.
6.3. JDBC 4.2 API Compliance
A driver complying with the JDBC specification should do the following:
[...]
It must implement the Statement interface, with the exception of the following optional methods:
It must implement the ResultSet interface, with the exception of the following optional methods:
The same is true for implementing ResultSet types. Further in the specifications you will find:
The DatabaseMetaData.supportsResultSetType method returns true if the specified type is supported by the driver and false otherwise.