如何在 Oracle 数据库中使用 camel SQL 组件插入 blob
How to insert blob using camel SQL component with Oracle Database
我正在尝试使用 camel SQL 组件 (http://camel.apache.org/sql-component.html) 插入输入流。
我在 Oracle 数据库中有以下 table:
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});
我总是得到一种不兼容的第三个参数(输入流)。
相同的代码 运行s 在 MySQL 数据库上没有错误,但在 Oracle 上运行不正常。
我看到组件 camel 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);
但是这个策略好像没有使用如下的prepare语句:
ps.setBinaryStream(3,inputStream,length);
而是调用下面的代码
ps.setObject(paramIndex, inputStream);
而且它似乎在 oracle 数据库上运行得不是很好。
所以问题是:我会更改 SQL camel 组件使用的默认 SQL 准备语句策略吗?或者还有其他方法吗?
非常感谢您的评论。
我刚刚找到了解决方案:
Resource r = contex.getResource("classpath:file/ciao.jpg");
InputStream inputStream = r.getInputStream();
SqlLobValue blobVal = new SqlLobValue(inputStream, (int) r.getFile().length() );
SqlParameterValue blob = new SqlParameterValue(Types.BLOB,"BLOB", blobVal );
aProducerTemplate.sendBody(new Object[] {"Mario", "Rossi",blob} );
我正在尝试使用 camel SQL 组件 (http://camel.apache.org/sql-component.html) 插入输入流。
我在 Oracle 数据库中有以下 table:
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});
我总是得到一种不兼容的第三个参数(输入流)。
相同的代码 运行s 在 MySQL 数据库上没有错误,但在 Oracle 上运行不正常。
我看到组件 camel 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);
但是这个策略好像没有使用如下的prepare语句:
ps.setBinaryStream(3,inputStream,length);
而是调用下面的代码
ps.setObject(paramIndex, inputStream);
而且它似乎在 oracle 数据库上运行得不是很好。
所以问题是:我会更改 SQL camel 组件使用的默认 SQL 准备语句策略吗?或者还有其他方法吗?
非常感谢您的评论。
我刚刚找到了解决方案:
Resource r = contex.getResource("classpath:file/ciao.jpg");
InputStream inputStream = r.getInputStream();
SqlLobValue blobVal = new SqlLobValue(inputStream, (int) r.getFile().length() );
SqlParameterValue blob = new SqlParameterValue(Types.BLOB,"BLOB", blobVal );
aProducerTemplate.sendBody(new Object[] {"Mario", "Rossi",blob} );