I’m having trouble retrieving data from my database using Spring Jdbc. Here’s my issue:
I have a getData() method on my DAO which is supposed to return ONE row from the result of some select statement. When invoked again, the getData() method should return the second row in a FIFO-like manner. I’m aiming for having only one result in memory at a time, since my table will get potentially huge in the future and bringing everything to memory would be a disaster.
If I were using regular jdbc code with a result set I could set its fetch size to 1 and everything would be fine. However I recently found out that Spring Jdbc operations via the JdbcTemplate object don’t allow me to achieve such a behaviour (as far as I know… I’m not really knowledgeable about the Spring framework’s features). I’ve heard of the RowCallbackHandler interface, and this post in the java ranch said I could somehow expose the result set to be used later (though using this method it stores the result set as many times over as there are rows, which is pretty dumb).
I have been playing with implementing the RowCallbackHandler interface for a day now and I still can’t find a way to get it to retrieve one row from my select at a time. If anyone could enlighten me in this matter i’d greatly appreciate it.
After a lot of searching and consulting with the rest of my team, we have come to the conclusion that this is not the best implementation path for our project. As Boris suggested, a different approach is the way to go. However, I’m doing something different and using SimpleJdbcTemplate instead and splitting my query so it’ll fit in memory better. A “status” field in my records table will be responsbile for telling if the record was successfully processed or read, so i know what records to fetch next.
The question if Spring Jdbc is capable of the behaviour i mentioned in my OP is, however, still in the air. If anyone has an answer for that question I’m sure it would help someone else out there.
Cheers!