1
我想使用駱駝SQL組件(http://camel.apache.org/sql-component.html)插入輸入流。如何在Oracle數據庫中使用駱駝SQL組件插入blob
我在Oracle數據庫如下表:
table EMPLOYEE(NAME varchar(32) ,SURNAME varchar(32) , PIC BLOB);
及以下路線:
<route>
<from uri="direct:startOracle" />
<to uri="sql:INSERT INTO EMPLOYEE (Name, surname, pics) VALUES (# , # , #)?dataSource=#oracle" />
</route>
當我試圖運行下面的代碼:
Resource r = contex.getResource("classpath:file/ciao.jpg");
InputStream inputStream = r.getInputStream();
aProducerTemplate.sendBody(new Object[] {"mario", "ross", inputStream});
我總是得到一種不兼容的第三參數(輸入流)。
相同的代碼在MySQL數據庫上運行時沒有錯誤,但在Oracle上運行不正常。
我看到組件駱駝SQL使用下面的代碼作爲一個策略,爲使用準備好的聲明:
// use argument setter as it deals with various JDBC drivers setObject vs setLong/setInteger/setString etc.
ArgumentPreparedStatementSetter setter = new ArgumentPreparedStatementSetter(args);
setter.setValues(ps);
,但這種策略似乎並沒有使用準備語句如下:
ps.setBinaryStream(3,inputStream,length);
而是調用下面的代碼
ps.setObject(paramIndex, inputStream);
,它似乎並不活像k在oracle db上很好。
所以問題是:我會更改SQL駝峯組件使用的默認SQL準備語句策略嗎?或者還有其他方法嗎?
它更多的去春來JDBC如果如果參數值是基於爲InputStream等 –
你可以嘗試換行輸入流中的SqlParameterValue他們可以支持使用的setBinaryStream問題類並將類型指定爲CLOB,那麼spring應該使用該信息。 –