【发布时间】:2017-08-17 10:18:46
【问题描述】:
我想创建一个spring-batch 作业以将 csv 内容(内存中)批量加载到mysql 数据库中。
我必须调用Statement 本身的setter。
st.setLocalInfileInputStream(..).
问题:我尝试使用ItemPreparedStatementSetter,但是里面的PreparedStatement只是一个私有代理,不能强制转换为语句,得到异常:
java.lang.ClassCastException: com.sun.proxy.$Proxy74 cannot be cast to com.mysql.jdbc.Statement
那么,如何使用ItemWriter 来执行批量插入?
以下不起作用:
JdbcBatchItemWriter<String> writer = new JdbcBatchItemWriter<>();
writer.setDataSource(ds);
writer.setSql("LOAD DATA LOCAL INFILE '' into table mytable");
ItemPreparedStatementSetter<String> ps = new ItemPreparedStatementSetter<String>() {
@Override
public void setValues(String csv, PreparedStatement ps) throws SQLException {
//this fails
((com.mysql.jdbc.Statement) ps).setLocalInfileInputStream(new ByteArrayInputStream(csv.getBytes()));
}
};
writer.setItemPreparedStatementSetter(ps);
writer.write(Arrays.asList(content));
【问题讨论】:
-
您找到解决方案了吗?谢谢
-
不幸的是,我没有放弃 spring-batch 框架。
标签: java mysql spring spring-batch