当你使用JDBC组装预执行语句的时候,参数的数量是有一个限制的,限制的大小就是2个byte的整数的大小,也就是32767,当超过这个大小的时候你就会看到上面的错误。这是因为PostgreSQL客户端/后端协议规定从客户端发送到PostgreSQL后端的参数的数量为2个byte的integer。
解决方案:遇到上述问题,是因为postpresql数据限制导致的,在不能更改数据库配置的情况,使用代码实现如下
shiSqlsessionfacory是注入的
public void insertToResultExcel(List<Map<String, Object>> paramList) {
SqlSession batchSqlSession = null;
try{
System.err.println("插入的数据量有---------->"+paramList.size());
batchSqlSession = shiSqlSessionFactory.openSession(ExecutorType.BATCH, false);
int num = 10000;//这里设置提交的条数,
for(int i = 0; i < paramList.size(); i++){
Map<String, Object> map = paramList.get(i);
PointDomain pointDomain = Map2Bean.map2Bean(map, PointDomain.class);
batchSqlSession.getMapper(SuanFaMapper.class).insert(pointDomain);
if(i != 0 && num == 0){
batchSqlSession.commit();
}
}
batchSqlSession.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
if(batchSqlSession != null){
batchSqlSession.close();
}
}