这个错是sqlserver抛出来的。 进过验证,上述错误中的2100为插入的总字段数。
好比下面这种插入方式,values后面的一个括号里的字段为30个,那么后面最多只能加70条,即这种批量插入方式一次性最多只能插入70条。java
insert table() values(),(),()....
若是超过71条,就会出现这个错误。这是使用了mybatis这个持久层框架以后sqlserver自身的限制。sql
1.批量插入改成循环单条插入,这个不太合适,批量就是为了提升插入效率,这样改只是解决了表面问题,却丢了咱们想要达到的目的。
2.使用JDBC的的方式执行批量插入。这个方法虽然实现麻烦了点,可是解决了这个报错的问题,也达到了咱们的目的。
这里给成第二种解决方式的java代码数据库
public void insert(List<Person> personList) throws SQLException { final String sql = "INSERT INTO MT_EXP_SUB(NAME,AGE,SEX) VALUES(?,?,?)"; Connection conn = null; PreparedStatement ps = null; try { // 获取数据库链接 conn = ds.getConnection(); if (conn == null) { throw(new RuntimeException("获取数据库链接失败")); } // 预编译SQL ps = conn.prepareStatement(sql); // 关闭自动提交事务 conn.setAutoCommit(false); for (Person person : personList) { ps.setString(1, person.getName()); ps.setInt(2, person.getAge()); ps.setString(3, person.getSex()); ps.addBatch(); } // 执行批量入库 ps.executeBatch(); // 手动提交事务 conn.commit(); }catch (Exception e) { // 批量入库异常,回滚 conn.rollback(); }finally { if(conn != null) { conn.close(); } if(ps != null) { ps.close(); } } }
参考连接1:https://blog.csdn.net/qq_35457078/article/details/85259789
参考连接2:https://bbs.csdn.net/topics/391933671mybatis