无法更新多行,表被锁定

时间:2017-10-16 05:42:28

标签: sql jdbc db2

我尝试使用“已关闭”更新多条记录。列的值很少的地方的状态。

但是,它让我回头

Error code :-913, Error message :[SQL0913] Row or object BBT_00008 in BB type *FILE in use.

这是我的代码

    public void updateIdsStatus(boolean allIdCreated, List<String> ids) throws ClassNotFoundException, SQLException, BBException {
    if(ids.size() > 0) {
        Connection con = null;
        PreparedStatement ps = null;
        con = DBUtil.getConnection();   
        try {               
            String sql;

            if (allIdCreated) {
                logger.info("Updating the status of the ids as CLOSED");
                sql = "UPDATE <table> SET STATUS = 'CLOSED' WHERE BBDIDNOPK IN ('"+StringUtils.join(ids, "', '")  +"') ";
            } else {
                logger.info("Updating the status of the deals as NEW");
                sql = "UPDATE <table> SET STATUS = 'NEW' WHERE BBDIDNOPK IN ('"+StringUtils.join(ids, "', '")  +"') ";
            } 
            logger.info("updateIdsStatussql :"+sql);
            ps = con.prepareStatement(sql);
            ps.executeUpdate();
        } catch (SQLException e) {
            logger.info(e.getErrorCode()+"-"+e.getMessage());   
            throw new BBException (e.getErrorCode(), e.getMessage());
         } catch (Exception e) {
            logger.info(e);
        } finally {
            try{    
                if(ps != null) 
                    ps.close();
                if (con != null)
                    con.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
    }
}

它打印的查询是

UPDATE <table name> SET STATUS = 'CLOSED' WHERE BBDIDNOPK IN ('abc34569sf', 'abc38511hu') 

桌子锁定的原因是什么?

P.S:没有其他人在运行除我以外的代码&amp;没有人访问数据库(DB2)。

1 个答案:

答案 0 :(得分:1)

List<String> ids来自哪里?

假设代码的另一部分中的SQL语句访问相同的行,那么它可能是您的锁源。

包括该代码......

没有它,一些建议

  • 传入连接,以便锁在同一连接中
  • 先关闭先前的RS /连接
  • 更新第一个语句中的行