Jeśli dobrze pamiętam sterowniki Oracle JDBC (przynajmniej starsze - nie powiedziałeś nam, której wersji używasz) nie obsługują setBytes() (lub getBytes() ).
Z mojego doświadczenia wynika, że używanie setBinaryStream() jest znacznie bardziej niezawodny i stabilny:
InputStream in = new ByteArrayInputStream(data);
pstmt.setBinarySream(4, in, data.length);