【发布时间】:2017-08-09 16:28:47
【问题描述】:
我使用PreparedStatement 来执行更新查询。
以下是查询:
String callersUpdateQuery = "update W67U999S a set pcrdattim= ? where exists (select b.CRDATTIM, b.RECORDCD, b.CRNODE, b.UNITCD, b.WRKTYPE from W03U999S b where a.PCRDATTIM = ? and a.CCRDATTIM = b.CRDATTIM and a.CRECORDCD = b.RECORDCD and a.CCRNODE = b.CRNODE and a.PRECORDCD = 'F' and a.PCRNODE = '01' and b.WRKTYPE = 'CALLER' and b.UNITCD=? and a.crecordcd='T')";
下面是应该更新记录的java代码:
preparedStatement = dbConnection.prepareStatement(callersUpdateQuery);
preparedStatement.setString(1,newFolderCrdattim);
preparedStatement.setString(2,crdattim);
preparedStatement.setString(3,businessAreaName.trim());
int j = preparedStatement.executeUpdate();
但是preparedStatement.executeUpdate() 没有更新所需的行并将更新的行数返回为零。奇怪的是,当我在数据库端执行相同的 sql 查询时,记录正在更新。
我的数据库是 Oracle,应该更新的表的架构如下:
Name Null Type
----------- -------- ----------
PCRDATTIM NOT NULL CHAR(26)
PRECORDCD NOT NULL CHAR(1)
PCRNODE NOT NULL CHAR(2)
RECORDTYPE NOT NULL NUMBER(3)
CCRDATTIM NOT NULL CHAR(26)
CRECORDCD NOT NULL CHAR(1)
CCRNODE NOT NULL CHAR(2)
CRDATTIM NOT NULL CHAR(26)
LINKRULE_ID NOT NULL NUMBER(14)
谁能猜出代码或查询有什么问题?
【问题讨论】:
-
“谁能猜到...?” 当然,我猜测这与
crdattim的值有关和/或businessAreaName。 -
仅供参考: 不要在
exists子句中对a设置条件。它们应该作为update的where子句的一部分在外面。 -
b.UNITCD的类型和大小是多少?也许this 可能会有所帮助。 -
b.UNITCD的类型是CHAR。仅供参考,都是 CHAR 类型。
标签: java