J'ai une procédure de base de données qui retourne une blob. Quelqu'un peut-il me dire comment manipuler le blob? Y a-t-il une API spécifique pour cela? P>
4 Réponses :
existe une API spécifique pour cela? em> strong> p> p> blockQuote>
Bien sûr, l'API JDBC. P>
- Trail: Accès à la base de données JDBC ™ LI> ul>
Vous obtenez la maintien de l'instance
blob code> tout comme vous obtenez une valeur de n'importe quelle valeur d'un ensemble de résultats. Vous devez ensuite utiliser le
get ... code> - et
définir ... code> Méthodes sur ce
blob code>. P>
Ici, vous avez essentiellement deux options: p>
Travail avec un octet-tableau: P>
- Obtenez la maintien d'un
octet [] code> contenant les données via
blob.getBytes code>
li>- manipuler cet octet-tableau li>
- Réglez-le en utilisant
blob.setbytes code>
.
li> ol> li>Travail avec
INPUTStream code> /
de sortie code>: p>
- Get Tenir un
INPUTStream code> via
blob.getbilarystream code>
li>- manipuler ce flux comme vous voyez FIT LI>
- Utilisez
Blob.setbarystream code>
.
li> ol> li> ul>Une approche alternative consiste à ignorer la messagerie avec
blob code> en premier lieu et utilisez plutôt la deuxième approche (avec des flux) directement via le "code> résultatsset code> -Interface. p>
Mon expérience est que résultatset.getbarydream () code> est plus robuste que de travailler avec des instances de
blob code>
@aioobe: Merci pour les réponses. Mais quelqu'un peut-il me dire comment "RestaurantsTbaraystream ()" est robuste par rapport à "blob.getbaraystream"?
Si votre pilote prend en charge RestructsetSet.getBlob CODE> et
BLOB.GETBARYARYSREAM CODE>, et que vous êtes assez confiant que vous ne passerez pas à une autre base de données, allez simplement avec celui que vous trouverez le plus lisible.
Avec une API simple Java JDBC, vous pouvez obtenir un java.sql.blob code>
retour d'un résultatsset code>
. P>
résultatset.getBlob (index) code> ou li>
-
résultatset.getBlob (Nom de colonne de chaîne) code>. Li>
ol>
Les deux renvoient un blob code>. p>
Une fois que vous avez obtenu un blob code>, vous pouvez obtenir le byte [] code> retour du blob.getbytes () code>
méthode ou défini en utilisant < Un href = "http://download.oracle.com/javase/6/docs/api/java/sql/blob.html#setbytes%28LONG ,%20BYte%5B%5D%29" rel = "nofollow"> < code> setbytes () code> méthode. p>
Mise à jour: voir que certains fournisseurs de pilotes de base de données ne prennent pas en charge code> blob code>, vous pouvez utiliser Resultset.getBinaryStream () Code>
. P>
Pourquoi inutile? L'existence d'un type de données BLOB dans la base de données n'a rien à voir avec le support du conducteur. Tous les conducteurs B> Support RESEILLET.GETBLEBLOB () CODE> Seulement support
Resultset.getInputStream () Code>
@Tall: Merci les gars pour les réponses. Si GetBlob () n'est pas pris en charge par tout alors quelle méthode est bonne à utiliser? Blob.getbaraystream ()?
Je fais habituellement résultatset.getBytes () code> et fonctionne avec
octet [] code>.
Cela dépend de quel type de blob contient (image, vidéo) et son extension. J'ai écrit un programme simple pour récupérer une image de DB et le montrer dans la page JSP. J'espère que cela aide.
pages JSP p> p> page de servlet p> procédure d'appel p>
Vous pouvez utiliser Javax. sql.rowset.serial.serialblob . P>
Je l'utilise dans mon application Springboot & Angular4 comme ceci: P>
SerialBlob Serialblob = Nouveau SerialBlob (octet []) code> li>
- stockez-le dans la base de données avec JPeePository Li>
ul>
Telle que l'API pour Java.SQL.Blob?