jdbc的批量插入问题:
Gauss数据库在大数据量查询时需要设置:AutoCommit=false;此时的JDBC批量插入会失效,需单独加事物控制;
public static <T> T batchUpdate (TransactionCallback<T> transactionCallback) {
DataSource dataSource = SpringContextUtil.getBean("sysDataSource");
PlatformTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
return transactionTemplate.execute(transactionCallback);
}
public static int update(String sql) {
DataSource dataSource = SpringContextUtil.getBean("sysDataSource");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
PlatformTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
return transactionTemplate.execute((TransactionCallback<Integer>) status ->{
//jdbcTemplate.execute(sql)
return jdbcTemplate.update(sql);
});
}
public static int[] batchInsert(final String sql, JdbcTemplate jdbcTemplate, final List list) {
return batchUpdate(new TransactionCallback<int[]>() {
public int[] doInTransaction (TransactionStatus status){
return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public int getBatchSize() {
return list.size();
}
public void setValues(PreparedStatement ps, int i) throws SQLException {
List parameters = (List) list.get(i);
for (int j = 0; j < parameters.size(); j++) {
Object object = parameters.get(j);
int newLoop = j + 1;
try {
if (null == object) {
ps.setNull(newLoop, Types.VARCHAR);
} else {
ps.setString(newLoop, object.toString());
}
} catch (Exception e) {
logger.error("数据插入失败"+e);
}
}
}
});
}
});
}