When using '? is null' in a prepared Statement, the compiler assumes ? as VARCHAR parameter, and thus fails if you bind a VARBINARY object to the parameter:
org.apache.derby.impl.jdbc.EmbedSQLException: An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'VARBINARY'
In Derby 10.2..2.0, only the embededded driver has the problem, the client driver works properly.
See this thread for more details: