Secondo me va in casino perchè quando scrivi

LIKE '?%'

Interpreta il ? non come una posizione in cui fare il setObject, ma come un carattere di una stringa.

Invece quando scrivi LIKE ?-?-?%

trova tutti i ? che gli servono per fare i set, ma non trova più la stringa nel formato 'stringa', tra apici.

Secondo me se riuscissi a scrivere la queri in questo modo:

LIKE ?

con

il ? settato con un setString ("blablabla%", 3);

dovrebbe funzionare.

Il Like funziona per le stringhe, non credo per le date, quindi il tuo ultimo tentativo dovrebbe fallire anche per questo.