huang_ftpjh 2021-05-17 15:37 采纳率: 0%
浏览 34

jdbc 批量插入, 想知道通过了多少条

执行的是存储过程 ,如果是单条插入在  proc.executeUpdate();后可以拿到结果
 

Connection conn = null;
        CallableStatement proc = null;
        try {
            conn = ConnectionUtils.openConnection(dataSourceName);
            proc = conn.prepareCall("{ call importuser(?,?,?)}");
            conn.setAutoCommit(false);
            for (UserModel model: models){
                proc.setString(1, model.getUsername());
                proc.setString(2, model.getPassword());
                proc.setString(3, model.getCitycode());
                proc.addBatch();
            }
            proc.executeBatch();
            proc.clearBatch();
            conn.commit();
        } catch (Exception e) {
            ConnectionUtils.rollback(conn);
            throw e;
        } finally {
            ConnectionUtils.closeConnection(conn, proc);
        }

但是,批量插入无法获取结果,

ResultSet resultSet = proc.getResultSet(); //返回null

ResultSet generatedKeys = proc.getGeneratedKeys(); //返回null

而数组只是

成功执行的记录数 成功执行存储函数,但是执行时检查重复的数据,本来该为不成功插入,但是记录数依然是0
int rows[] = ps.executeBatch();  //[0,0,0]
for(int row : rows) {
   count += row;
}

我想计算不通过的个数。 存储过程中有判断重复的语句,重复的话不执行insert。 所以想要获取批量插入的结果集 或者说是 插入数据的影响行数;让我至少知道哪一条记录是错的

  • 写回答

2条回答 默认 最新

  • summer_du 2021-05-17 17:10
    关注

    没看懂啥意思 。。

    总之,要么都通过,要么都不通过,即要么是0,要么是models.length。因为你设置了回滚,如果遇到异常的话,会都无法通过。

    评论

报告相同问题?