java preparedstatement executeUpdate返回错误的受影响行

java preparedstatement executeUpdate返回错误的受影响行,java,spring,prepared-statement,jdbctemplate,Java,Spring,Prepared Statement,Jdbctemplate,我使用spring jdbctemplate更新了一些行,但是我收到了这个日志消息。两个完全相同的sql返回不同的受影响行。第二个更新操作无法返回0个受影响行。我就是搞不清楚 2015-12-03 12:37:37 [INFO] [qtp683362635-1187] c.t.s.c.i.d.IDGJdbcDao - update: update JCSZ..T_IDG set N_VALUE = ? where C_BusinessID = ? and C_ComID = ?

我使用spring jdbctemplate更新了一些行,但是我收到了这个日志消息。两个完全相同的sql返回不同的受影响行。第二个更新操作无法返回0个受影响行。我就是搞不清楚

2015-12-03 12:37:37 [INFO] [qtp683362635-1187] c.t.s.c.i.d.IDGJdbcDao - update:

update JCSZ..T_IDG
   set N_VALUE = ?
 where C_BusinessID = ?
   and C_ComID = ?
   and C_RateID = ?
   and N_TYPE = ?
   and N_ConfType = ?
受影响行:373行

        2015-12-03 12:37:38 [INFO] [qtp683362635-746] c.t.s.c.i.d.IDGJdbcDao - update:
update JCSZ..T_IDG
   set N_VALUE = ?
 where C_BusinessID = ?
   and C_ComID = ?
   and C_RateID = ?
   and N_TYPE = ?
   and N_ConfType = ?
受影响的行:0行

进行一些研究(询问谷歌)我发现一些关于
更新的提示,返回
仅给出实际更改的行数。至少这应该是以下人员的行为:

        2015-12-03 12:37:38 [INFO] [qtp683362635-746] c.t.s.c.i.d.IDGJdbcDao - update:
update JCSZ..T_IDG
   set N_VALUE = ?
 where C_BusinessID = ?
   and C_ComID = ?
   and C_RateID = ?
   and N_TYPE = ?
   and N_ConfType = ?
我假设它也适用于其他数据库系统


因此,当执行两次完全相同的更新查询时,您的结果正是应该发生的。第一次更改所有内容时,返回已找到的行数,第二次不再更改任何内容时,将为您提供
0

您使用的语句具有完全相同的参数,对吗?当
N\u值
发生变化时,您会直接在彼此之后超出它们,可能有某种触发器会改变
where
子句中的一列?只是一个随机猜测…另一个猜测,你是否设置了两次完全相同的值?可能这返回0是因为第二次没有任何更改。你尝试过更改状态的顺序吗?是的,where条件是相同的。我只是选择一些日志来向大家展示这个情况。真正的日志显示有数千次更新操作,只有少数更新返回o,它们都是相同的where条件。更新列不在where列中,因此如果不考虑其他因素,每次执行sql时,如果where条件相同,它应该返回相同的结果,即使结果不同,也不应该是0。我想说的是:
:{id:1,值:0}<代码>代码:
更新表设置值=2,其中id=1;更新表集合值=2,其中id=1
。第一次更新将返回1,因为1行已从
0
更改为
2
。第二次更新看到
table_updated
:{id:1,value 2},因此它返回0,因为将值从
2
更改为
2
不会影响任何行。如果你的情况不是这样的话,我误解了你的问题。如果有一些线程安全问题,那完全有可能,就像你说的那样。你是一个真正的救生员