2009-09-24 6 views
1

J'ai une procédure stockée Oracle qui retourne un blob dans un paramètre de sortie:Lecture d'un blob avec Spring JDBC sans jeu de résultats

PROCEDURE GET_IMAGE_DATA(i_image_type IN NUMBER, o_image_data OUT BLOB) IS 
BEGIN 
     SELECT IMAGE_DATA 
     INTO o_image_data 
     FROM IMAGES 
     WHERE IMAGE_TYPE = i_image_type; 

END GET_IMAGE_DATA; 

Je veux utiliser Spring JDBC pour lire ces données. Cependant, DefaultLobHandler (et je pense que OracleLobHandler) getBlobAsBytes() nécessite un resultset. Comment puis-je obtenir les données BLOB quand tout ce que j'ai est un paramètre out et pas un resultset?

Répondre

1

L'API JDBC Spring (DefaultLobHandler et OracleLobHandler) nécessite un objet ResultSet pour ses méthodes BLOB.

Vous devez convertir votre GET_IMAGE_DATAprocédure en fonction :

FUNCTION ATTACHMENT_BLOB_GET(IN_IMAGE_TYPE IN IMAGES.IMAGE_TYPE%TYPE) 
RETURN SYS_REFCURSOR AS 

results_cursor SYS_REFCURSOR; 

BEGIN 

    OPEN results_cursor FOR 
    SELECT t.image_data 
     FROM IMAGES t 
     WHERE t.image_type = IN_IMAGE_TYPE; 

    RETURN results_cursor; 

END; 

paramètres OUT sont toujours bon pour une douleur, en particulier BLOBs.

0

Il est en effet possible de lire Blob comme Stream/byte [] sans ResultSet. Vérifiez this une sortie.

Questions connexes