2
我必須通過Oracle DB使用存儲過程。將二進制存儲到BLOB中
我用彈簧叫它
public StoreOperation(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate, STORE);
declareParameter(new SqlParameter("in_binary_data", Types.BINARY));
//declareParameter(new SqlParameter("in_binary_data", OracleTypes.BLOB));
declareParameter(new SqlParameter("in_int_id", Types.INTEGER));
declareParameter(new SqlOutParameter("out_int_id", Types.BIGINT));
declareParameter(new SqlOutParameter("out_checksum", Types.VARCHAR));
compile();
}
public Map execute(byte[] signedPdf, Long intId) {
Map inParams = new HashMap(2);
inParams.put("in_binary_data", signedPdf);
inParams.put("in_int_id", intId);
return execute(inParams);
}
Apparenlty使用Types.BINARY工作
declareParameter(new SqlParameter("in_binary_data", Types.BINARY));
使用BLOB不允許
declareParameter(new SqlParameter("in_binary_data", Types.BLOB));
==> java.lang.ClassCastException :[B無法投射到oracle.sql.BFILE]]
這是一個傳統的存儲過程,所以我無法訪問Blob流到它,所以我被迫使用字節[]
這可能是一個問題,如果我使用的sql類型是Types.BINARY和數據庫類型是BLOB?
因此,在不使用java.sql.types.Blob和流的情況下在BLOB中存儲一個字節[]可以嗎?
由於
我得到了byte [],並將其傳遞給使用BLOB作爲類型存儲的存儲過程 – Cris
我編輯了我的答案。 – Santosh