Presenting the scrollable Result Set

Numerous engineers are uninformed of the way that JDBC has been extensively improved throughout the long term, even though those upgrades are reflected in new form numbers and deliveries. As of composing this, JDBC remains at form 4.2.

One of the intriguing (however oftentimes overlooked) improvements is the capacity to “look” through the ResultSet, which means we can go ahead or in reverse, or even both, as need directs. Doing as such requires a touch of groundbreaking, in any case — the JDBC call should demonstrate that it needs a scrollable ResultSet at the time the Statement is made.

Confirming ResultSet type

On the off chance that you speculate a driver may not really support scrollable ResultSets, notwithstanding what it says in the DatabaseMetaData, you can confirm the ResultSet type by calling getType(). Obviously, in case you’re that neurotic, you probably won’t believe the return worth of getType(), by the same token. All things considered, if getType() lies about the ResultSet returned, they truly are out to get you.

In the event that the basic JDBC driver upholds looking over, a scrollable ResultSet will be gotten back from that statement, yet it’s ideal to sort out if the driver upholds scroll ability prior to requesting it. You can get some information about looking over through the DatabaseMetaData object, which can be acquired from any Connection, as portrayed beforehand.

When you have a DatabaseMetaData object, a call to getJDBCMajorVersion() will recover the major JDBC adaptation number for this driver. Obviously, a driver could lie about its degree of help for a given determination, so to play it especially protected, call the supportsResultSetType() technique with the ideal ResultSet type. (It’s steady on the ResultSet class; we’ll talk about the upsides of each in a second.)

You must be especially cautious when calling createStatement() since its first and second boundaries are both ints. Any int esteem (counting some unacceptable steady worth) will work with createStatement().


This is the default, firehose-style cursor that we know and love.


This ResultSet empowers in reverse emphasis just as forward, yet in the event that the information in the data set changes, the ResultSet will not reflect it. This scrollable ResultSet is likely the most generally wanted sort.


The ResultSet made won’t just take into consideration bidirectional emphasis, yet will likewise give a “live” perspective on the information in the data set as it changes.

In the event that you plan on doing a ton of looking a specific way, you can help the ResultSet by indicating that bearing, by calling setFetchDirection(). (A ResultSet will work paying little mind to its looking over heading yet knowing in advance permits it to enhance its information recovery.)

Requesting an updateable ResultSet is like the interaction associated with requesting a scrollable ResultSet. Indeed, it’s the place where you’ll utilize the second boundary to createStatement(). Rather than determining ResultSet.CONCUR_READ_ONLY for the subsequent boundary, send ResultSet.CONCUR_UPDATEABLE.

Goodness, and before it slips my mind, the entirety of this scroll ability and updates ability applies similarly to Prepared Statement (bypassing those boundaries to the prepare Statement() technique), which is vastly desirable over a standard Statement because of the consistent risk of SQL infusion assaults.

In idea, a Rowset is basically a ResultSet, however one which takes into consideration either an associated or detached model. You should simply make a Rowset, point it at a ResultSet, and when it’s finished populating itself, use it as you would a ResultSet.

Regardless of their helpfulness, Rowsets in some cases simply don’t address every one of your issues, and you might have to fall back to composing straight SQL explanations. In those circumstances, especially when you’re confronting the number of work, you may see the value in the capacity to do bunch refreshes, executing more than one SQL proclamation against the data set as a feature of one organization full circle.

Regardless of whether you choose to utilize JDBC’s fresher highlights is dependent upon you, obviously. A vital angle to consider will be the versatility of the framework you’re dealing with. The higher it needs proportional, the more obliged your utilization of the data set will be, and along these lines the more you’ll have to lessen network traffic against it. Rowsets, scalar calls, and clump updates will be your companions here. Something else, attempt the scrollable and updateable ResultSets (which don’t burn-through as much memory as Rowsets do), and measure the versatility hit. It likely will not be pretty much as terrible as you anticipate.

Sources and references :

Copy link
Powered by Social Snap