According to the java docs of
PreparedStatement.setNull: "Note: You
must specify the parameter's SQL
type". What is the reason that the
method requires the SQL type of the
column?
For maximum compatibility; as per the specification, there are some databases which don't allow untyped NULL to be sent to the underlying data source.
I noticed that passing
java.sql.Types.VARCHAR also works for
non-varchar columns. Are there
scenarios in which VARCHAR won't be
suitable (certain column types or
certain DB providers)?
I don't think that sort of behaviour really is part of the specification or if it is, then I'm sure there is some sort of implicit coercion going on there. In any case, relying on such sort of behaviour which might break when the underlying datastore changes is not recommended. Why not just specify the correct type?