Because most databases also have an internal concept of datatype AND also have some implicit conversion rules. In other words, when you use setDate, the database receives a date object and will use that unconverted in your query. When you use setString, the database receives a string object and might attempt to convert it to a date object, in order to ...