我有一个用户上传的 csv 文件,我需要将其作为 Clob 存储在 oracle 表中。
因此我有这个代码:
MultipartHttpServletRequest mr = (MultipartHttpServletRequest) ctx.getRequest();
final MultipartFile f = mr.getFile("datafile");
final InputStream is = f.getInputStream();
...
jdbc.getJdbcOperations().execute(sql, new PreparedStatementCallback<Integer>() {
public Integer doInPreparedStatement(final PreparedStatement psInsert) throws SQLException,
DataAccessException {
...
psInsert.setCharacterStream(1, new InputStreamReader(is));
psInsert.executeUpdate();
}
});
另外,我尝试过使用 PreparedStatement 的 setClob 和 setAsciiStream 方法,也尝试过这种方法(设置文件大小),但结果是一样的 -
java.lang.AbstractMethodError
org.apache.commons.dbcp.DelegatingPreparedStatement.setAsciiStream(DelegatingPreparedStatement.java:338)
org.apache.commons.dbcp.DelegatingPreparedStatement.setAsciiStream(DelegatingPreparedStatement.java:338)
org.apache.commons.dbcp.DelegatingPreparedStatement.setAsciiStream(DelegatingPreparedStatement.java:338)
底层 InputStream 是 ByteArrayInputStream (如果这可能会有所不同)
PS:该表确实有 CLOB 字段:
P_FILE CLOB NOT NULL,
UPD:我实际上还没有尝试过 Oracle 实现的方法。它有效,唯一的问题是,与 PreparedStatement 接口中的方法相比,oracle 驱动程序并未实现所有方法。查看可能的可用方法的类是 OraclePreparedStatement ...