Oracle DB 経由でストア プロシージャを使用する必要があります。
私は春を使ってそれを呼んだ
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 に格納し、ストリーミングしても問題ありませんか?
ありがとう