ユーザーがアップロードした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で実装されたメソッドを実際に試したことはありません。それは機能します。唯一の問題は、OracleドライバーがPreparedStatementインターフェースにあるメソッドと比較してすべてのメソッドを実装しているわけではないことです。使用可能なメソッドを調べるクラスは、OraclePreparedStatement...です。