我有一个表,其中的列为
我正在研究在此表上运行选择查询以获取结果集的情况。
从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一起使用
谢谢
答案 0 :(得分:1)
在发出另一个请求之前,您需要缓存resultSet。试试这个:
CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet();
crs.populate(myResultSet);