getBytes vs getBinaryStream vs getBlob pour extraire des données d'une colonne de BLOB

il y a 3 façons différentes de sortir des données d'une colonne de Blob: getBytes getBinaryStream getBlob

aussi, l'objet Blob retourné par getBlob a aussi un GetBytes et getBinaryStream dessus.

y a-t-il des raisons particulières (performance, Mémoire, problèmes spécifiques à la base de données) pour lesquelles je devrais choisir l'une plutôt que l'autre?

l'objet Blob a aussi un appel libre() qui a été introduit depuis JDBC 4.0. Cela fait-il une différence?

19
demandé sur Kapsh 2009-04-17 19:05:42

2 réponses

si vous allez tirer beaucoup de données (c.-à-d. assez de données pour causer des problèmes de mémoire), alors getBinaryStream vous donnera la plus grande flexibilité pour traiter et rejeter les données que vous lisez.

d'un autre côté, cela pourrait être assez lent, en fonction de votre pilote JDBC, puisque chaque lecture du flux pourrait entraîner beaucoup de bavardage réseau avec la base de données. Si vous appelez getBytes, alors le conducteur sait aller chercher tout le lot en une seule fois, ce qui est probablement plus efficace.

getBlob () renvoie un "pointeur" vers les données, que vous pouvez manipuler en utilisant les méthodes de L'interface Blob. Si vous avez besoin de modifier ou d'obtenir autrement fantaisie avec les données in-situ, alors cela pourrait être le mieux pour vous.

15
répondu skaffman 2009-04-17 15:18:46

généralement vous voulez choisir les méthodes basées sur les flux (i.e. getBlob ().getbinarystream () ou getBinaryStream ()) plutôt que la méthode byte-array.

  1. Performances. Le pilote a une chance de retirer progressivement les octets de la base de données.
  2. Mémoire. Vous n'avez pas à charger tous les octets à la fois, et dans un bloc contigu.

dans le pire des cas, la base de données (ou le pilote JDBC) ne supporte pas vraiment les données binaires en streaming, mais il n'y a toujours pas pénalité appréciable pour l'utilisation des méthodes d'écoulement en continu.

6
répondu Jason Cohen 2009-04-17 15:11:52