java 一次循环中,插入两条相同的数据

blowacoldwind 2008-11-28 11:20:38
这是一个java写的程序,我在读到另一个系统的xml文件后,将数据插入到另一个系统的数据库,在插入前做判断,如果这条记录已经存在,那么更新,没有的话就插入,程序已经运行一年多没有问题了,最近有几个接口,都出现过一条数据重复插入的问题。

请各位给点意见,推测是哪方面的问题造成的,因为想重现错误非常难。

我的推测及根据:
1,数据库使用的是oracle,表的主键是一个自增序列,所以不能约束,重复值,但是一年多没有出过次类问题。
2,插入的两条数据的插入时间是相同的,例如有50条数据需要插入,那么循环50次,第一条插入的时间,可能会比最后一次插入的时间早1秒钟,其中第5条数据,在插入的时候居然是两条,数据包括插入的时间是一样的。这说明它应该是循环到此条数据时插入了两次。启动两个服务的可能性不大。
3,是网络问题造成的java和oracle之间有问题?

for(int i=0;i<list.size();i++)
{
String tmp = list.getKey("id");
String sql = "select count(*) from tablename where id = '"+tmp+"'";
int count = executeQueuery(sql);
if(count<1)
insert(tmp);
else
update(tmp);
}

以上代码是思路,大概就是这样子。是自动提交的,我怀疑在判断count<1的时候,连续插入了两次。有没有遇到此问题的,给点建议。
真是太郁闷了 等待中。
...全文
476 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sqlnull 2008-11-29
  • 打赏
  • 举报
回复
猜测一下,或许跟Java的内存泄漏有关系。。
lxmtx___2008 2008-11-29
  • 打赏
  • 举报
回复
同意一楼的仁兄
wenyu520 2008-11-28
  • 打赏
  • 举报
回复
首先你这个ID用自增序列可能会出现重复的情况!if(count <1) { }else{ } 这个就代表ID会相同.
网络问题不会造成插入的数据出现两条。

你查询这个数据返回实体,如果为null就创建,有就更新。你返回个数时,那个else if(count==1)才更新才对.
因为你查询ID是唯一的.

你说会创建两条相同的数据,你检查下那List。

Ning_Hua 2008-11-28
  • 打赏
  • 举报
回复
同意一楼的看法,呵呵
  • 打赏
  • 举报
回复
一年多运行了?现在才出现的问题啊!?
blowacoldwind 2008-11-28
  • 打赏
  • 举报
回复
不是每条都重复的 就出现了一条 现在是有人要造成的原因啊 唉 郁闷啊
blowacoldwind 2008-11-28
  • 打赏
  • 举报
回复
不是不想调试啊 就只出现过一次,都用一年多了 就昨天出现了一次 删了重来 根本就不会出现这样的情况了
polimo 2008-11-28
  • 打赏
  • 举报
回复

for(int i=0;i <list.size();i++)
{
String tmp = list.getKey("id");
String sql = "select count(*) from tablename where id = '"+tmp+"'";
int count = executeQueuery(sql);
if(count <1)
insert(tmp);
else
update(tmp);
}


首先确定你的tmp 值是每次都变的,否则可能出现的情况是
sql 几次的内容一样也就导致 count 的数值一样插入的也就一样了.
int count = executeQueuery(sql);

建议调试下..
yctang 2008-11-28
  • 打赏
  • 举报
回复
插入一条数据,什么时候提交的
web_win_w 2008-11-28
  • 打赏
  • 举报
回复
是不是原先的数据就已经重复了?
serryzhao 2008-11-28
  • 打赏
  • 举报
回复
你设个断点调一下啊

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧