결과 세트없이 JDBC 스프링을 사용하여 블로브 읽기
-
16-09-2019 - |
문제
출력 매개 변수에서 Blob을 반환하는 Oracle 저장 절차가 있습니다.
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;
JDBC 스프링을 사용 하여이 데이터를 읽고 싶습니다. 그러나 DefaultLobHandler (그리고 oraclelobhandler) getBlobasbytes ()는 resultSet이 필요하다고 생각합니다.
private static class QueryForBinaryCryptKey extends StoredProcedure {
private static final String SQL = "IMAGE_PKG.GET_IMAGE_DATA";
private DefaultLobHandler lobHandler;
QueryForImageData(DataSource dataSource) {
super(dataSource, SQL);
setFunction(false);
lobHandler = new DefaultLobHandler();
declareParameter(new SqlParameter(KEY_TYPE, OracleTypes.NUMBER));
declareParameter(new SqlOutParameter(KEY_BLOB, OracleTypes.BLOB));
}
public Map getImage(int keyType) {
Map outParams = super.execute(inParams(keyType));
//how can I get the contents of the blob right here since
//getBlobAsBytes requires a resultSet???
return outParams;
}
private Map inParams(int keyType) {
Map params = new HashMap();
params.put(KEY_TYPE, new Integer(keyType));
return params;
}
}
내가 가진 모든 것이 결과 세트가 아닌 Out 매개 변수 일 때 Blob 데이터를 어떻게 얻을 수 있습니까?
해결책
JDBC 스프링 API (DefaultLobHandler 그리고 Oraclelobhandler) a 결과 세트 블로브 관련 방법에 대한 객체.
당신은 당신의 변환이 필요합니다 GET_IMAGE_DATA
절차 a 기능:
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;
아웃 매개 변수는 항상 슬픔, 특히 얼룩에 적합합니다.
다른 팁
실제로 Blob을 restame/byte []로 결과 세트없이 읽을 수 있습니다. 확인하다 이것 하나 아웃.
제휴하지 않습니다 StackOverflow