This chapter introduced us to a new concept: Prepared Statements. We have seen how they simplify our queries and further protect us from SQL syntax errors and code vulnerabilities. We also took a look at how to work with BLOBs using streams so that we don't run the risk of query failures. Our application can now be used to upload and show cover images for the books in the database.
In the next chapter, we shall see how to determine the number of rows in a result set, which is necessary to paginate long lists of items. (The most common example is a search engine that breaks the result list into 10 results per page.) Also, we will familiarize ourselves with a new concept: scrollable cursors that will allow us to fetch a subset of rows from a result set starting at a specified position.