【发布时间】:2017-10-16 05:42:27
【问题描述】:
我正在尝试更新多个具有“已关闭”状态的记录,只要该列的值很少。
但是,它返回了我
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:除了我之外没有其他人在运行代码,也没有人在访问数据库(DB2)。
【问题讨论】:
-
除了你之外没有人在运行代码,但是其他人会使用数据库吗?如果是这种情况,请告诉我们。
-
@TimBiegeleisen,已更新。没有人在使用数据库,也没有其他开发人员或测试人员。只有我使用代码和数据库
-
@a_horse_with_no_name,我正在使用 DB2 并在问题中进行了更新。
-
如果 Db2 服务器在 i 系列 (as/400) 上运行,请遵循文档页面 ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/rzala/… 上的 SQL0913 恢复文本,特别是从 Db2 确定哪些锁处于活动状态。您可能认为您是唯一针对该表运行的语句,因此最好验证您的假设。
-
旁注:直接连接是 SQL 注入的向量。你应该做的是创建一个参数标记的动态列表并替换它们(如果没有别的,为了良好的做法)。