Because its implemented in different ways by different database driver vendors e.g. oracle's resultset is implemented in a different way to sybase's. Since they all stick to the same interface, you should be able to change databases without changing your code.