选择在同一行上运行Update语句时不返回结果吗?

时间:2018-10-16 16:28:51

标签: java sql oracle11g

我有一个表,其中的列为

Task_Track

  • TaskID号(PK自动生成序列)
  • TaskCd Varchar2
  • RefCd Varchar2
  • RefID varchar2
  • Params varchar2
  • ...等

我正在研究在此表上运行选择查询以获取结果集的情况。

  

从Task_Track选择*,其中RefCd =吗?和RefID =?和TaskCd =?;

如果没有任何结果,我将使用RefCd RefID TaskCd Params值插入一个新任务。参数通常是与任务相关的person_id。 如果我得到结果集,则将追加新参数并更新结果集。

  

if(resultset!= null和resultSet.length()> 0)

     

更新参数逻辑

     

其他

     

插入新任务逻辑。

此操作按预期运行。 但是,当我有2个并行队列正在运行并且同时获得相同的RefCd RefID TaskCd值时。 我的第一个存储桶正在找到结果集,并将按预期执行更新逻辑,但是第二个队列无法找到结果,而是进入了插入逻辑。

据我了解,即使第一个队列已锁定更新行,第二个队列也不会对读取造成任何问题,并且如果第一个队列未释放锁,则由于锁定而在更新时失败。但是我的读取本身失败了,它没有引发任何异常,而是返回了一个空的结果集(长度= 0)。因此,它正在进入插入逻辑。

读取是否可能受并行发生的更新影响?如果是这样,我应该如何解决?

注意:我正在将Oracle 11G和Java8与Websphere 9一起使用

谢谢

1 个答案:

答案 0 :(得分:1)

在发出另一个请求之前,您需要缓存resultSet。试试这个:

CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet();
crs.populate(myResultSet);