我必须通过 Oracle DB 使用存储过程。
我用spring来称呼它
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);
}
显然使用 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 以流式传输到它,所以我被迫使用 byte[]
如果我使用的 sql 类型是 Types.BINARY 并且数据库类型是 BLOB ,这可能是个问题?
因此,在不使用 java.sql.types.Blob 和流式传输的情况下将 byte[] 存储在 BLOB 中可以吗?
谢谢