La conversion de la Chaîne de Clob à l'aide de setString() ne fonctionne pas
Je suis en train de convertir une Chaîne en un Clob à stocker dans une base de données. J'ai le code suivant:
Clob clob = connection.createClob();
System.out.println("clob before setting: " + clob);
clob.setString(1,"Test string" );
System.out.println("clob after setting: " + clob);
System.out.println("clob back to string: " + clob.toString());
Lorsque je l'exécute les Clob n'est pas définie, la sortie est comme suit:
clob before setting: org.apache.derby.impl.jdbc.EmbedClob@1f5483e
clob after setting: org.apache.derby.impl.jdbc.EmbedClob@1f5483e
clob back to string: org.apache.derby.impl.jdbc.EmbedClob@1f5483e
Partout où je regarde, dit d'utiliser le setString méthode, je n'ai aucune idée de pourquoi cela ne fonctionne pas pour moi.
Vous pouvez simplement utiliser
Vous penser, à tort, que Clob.toString() renvoie le Clob contenu. Ce n'est pas le cas. Votre sortie de débogage, par conséquent, ne pas aider à diagnostiquer le problème. Et je ne suis pas sûr que vous avez un problème à tous.
J'essaie d'insérer une ligne dans une table qui a des Clob comme type de données, donc je suis en utilisant une instruction préparée avec une variable '?', et puis d'essayer de les lier à un Clob à cette variable. Je ne comprends pas ce que vous avez suggéré, mais je suppose qu'il ne s'applique pas à moi.
comment puis-je accéder à la clob contenu? la méthode toString() est ce que google suggère, et il retourne une chaîne de caractères, donc je ne vois pas le problème
Comme je l'ai dit: il n'est pas nécessaire d'utiliser le
setString()
sur le PreparedStatement
. Pas besoin de créer l'intermédiaire Clob
instance.Vous penser, à tort, que Clob.toString() renvoie le Clob contenu. Ce n'est pas le cas. Votre sortie de débogage, par conséquent, ne pas aider à diagnostiquer le problème. Et je ne suis pas sûr que vous avez un problème à tous.
J'essaie d'insérer une ligne dans une table qui a des Clob comme type de données, donc je suis en utilisant une instruction préparée avec une variable '?', et puis d'essayer de les lier à un Clob à cette variable. Je ne comprends pas ce que vous avez suggéré, mais je suppose qu'il ne s'applique pas à moi.
comment puis-je accéder à la clob contenu? la méthode toString() est ce que google suggère, et il retourne une chaîne de caractères, donc je ne vois pas le problème
Comme je l'ai dit: il n'est pas nécessaire d'utiliser le
Clob
instance. setString()
directement sur la déclaration suffira. Voir ma réponse.OriginalL'auteur Bugalugs Nash | 2013-09-22
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de l'intermédiaire
Clob
exemple, il suffit d'utilisersetString()
sur lePreparedStatement
:OriginalL'auteur a_horse_with_no_name
Ne sais pas si cela fonctionne pour le derby, mais pour hibernate, vous pouvez utiliser:
OriginalL'auteur Vasil Lukach
Ce que vous êtes la lecture de votre Système..println déclarations ne sont pas représentatifs de ce qui se passe réellement dans le Clob. Vous êtes tout simplement la lecture de la valeur par défaut de java.lang.Objet.la méthode toString() de la Clob, qui dans ce cas est la sortie de l'ID de l'instance, et qui ne change pas, peu importe ce que vous mettez dans.
Vous utilisez le Clob correctement charger la Chaîne sur elle, mais pas de lecture de la Chaîne de valeur de retour. Pour lire la valeur de Chaîne à partir d'un clob utiliser...
BTW: si vous utilisez de grandes chaînes, vous NE souhaitez convertir une Chaîne en un Clob, si la Chaîne est plus grande que l'Oracle varchar2 limite et de vous envoyer une simple Chaîne de caractères, il pourrait tronquer l'entrée ou de sauter. Si l'Oracle proc appels pour un Clob, lui en donner une.
OriginalL'auteur Al W