J'utilise la base de données Derby. J'ai écrit cette requête:Comparer les types de Blob dans PreparedStatement
InputStream is = new java.io.ByteArrayInputStream(BYTES);
PreparedStatement st11 = conn.prepareStatement("select f from a1 where dBlob =?)");
st11.setBlob(1,is,BYTES.length);
dBlob est un type de données BLOB. BYTES est également un type de données BLOB.
Mais je reçois l'exception suivante quand j'exécute cette requête:
Causée par: ERREUR 42818: Les comparaisons entre les « blob » et « blob » ne sont pas pris en charge. Les types doivent être comparables. Les types de chaîne doivent également avoir un classement correspondant. Si co llation ne correspond pas, une solution possible est de jeter opérandes pour les forcer à le classement par défaut (par exemple SELECT tablename DE sys.systables OU CAST (tabl Ename AS VARCHAR (128)) = 'T1')
Comment écrire la requête pour contourner ce problème?
J'ai aussi essayé d'utiliser Convertir, mais il ne fonctionne pas avec cela aussi:
PreparedStatement st11 = conn.prepareStatement("select f from a1 where dBlob
=CONVERT(?,BINARY)");
st11.setBlob(1,is,BYTES.length);
De plus, est-il possible d'obtenir le type de l'argument étant passé dans? par la réflexion ou par d'autres moyens.
Merci Bryan. J'avais résolu ce problème. Je compare les types de paramètres définis dans PreparedStatement pour certaines raisons. Est-il possible de donner un type de comparaison générique pour tous les objets LOB ou dois-je comparer spécifiquement pour chacun des types de données CLOB, BLOB et nCLOB? – krammer