java如何判断是否插入重复数据(唯一约束),使用异常还是先查一遍如果不存在再插入?

Coding_Dog 2013-11-02 05:39:36
一直没解决这个问题,想请教一下各路大神。
我现在要将excel中的多条学生信息导入数据库,学号为唯一约束,只要一个学生信息已经在数据库中了,就反馈给客户端导入失败,我是应该插入每条数据之前查一下呢,还是用异常判断呢?小弟新人,请各路大神不吝赐教。

...全文
18611 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fyj_style 2014-07-29
  • 打赏
  • 举报
回复
引用 8 楼 songbgi 的回复:
[quote=引用 5 楼 lp1137917045 的回复:] 我也觉得先查询判断后插入如果数据太多的话肯定影响效率,但异常处理的话,我感觉不太合理,更何况违反唯一约束的异常如何捕获?
引用 6 楼 yoxibaga 的回复:
select count(id) from student where id=?1; 此结果作为判断条件,这样查询应该也可以优化下。
很好的回答了 把id加索引[/quote] 大家好 我想问下 select count(id) from student where id=?1 where id = ?1 是什么意思 ?
qq_18615837 2014-07-29
  • 打赏
  • 举报
回复
看需求,你只是为了返回给客户端提示导入失败,所以考虑使用异常捕获就可以了,而且简单、靠谱,并发都不用考虑。还有根本不需要区分具体是抛得什么异常,只要是exception就说明程序报错了,那肯定是失败了
未来纪元 2014-07-29
  • 打赏
  • 举报
回复
出现异常调用的资源更加多,当然如果异常出现少的话,相比每一个插入都要查询一下来说资源就少了。不过一般都不用唯一性约束异常来做吧,异常多了数据库错误的几率会更加大吧。如果能够保证新插入的数据,不管重复或不重复都是正确的数据,直接先delete然后insert。
  • 打赏
  • 举报
回复
在sql里面 比在代码里面判断 方便 快速。。执行一次sql就好了。比如: IF not EXISTS (select * from a where item_id=@itemId and person_id=@personId) insert into a values(@itemId, @personId, getDate())
scott_129 2014-07-28
  • 打赏
  • 举报
回复
看数量量和出现重复的几率。查数据库--两个数据比对,这中间耗时最大的应该是查数据库,因为需要去拿数据库连接,重复不听的geConnection很耗时。另一种如果数据库并发操作不高的话,可以将数据一次性全取出来,用map装起来,然后利用程序从excel中读到的数据进行对比,如果成功则一批批的插入数据库。
huming1066 2014-07-28
  • 打赏
  • 举报
回复
用异常捕获! 是抛出什么异常?
  • 打赏
  • 举报
回复
引用 3 楼 u012691501 的回复:
从技术上讲两种方法是都可以达到目的(抛出违反唯一性约束所以知道已经有了),但是从编程优化角度讲一定是先判断是不是存在然后再插入!
同意
别闹腰不好 2013-11-05
  • 打赏
  • 举报
回复
先查 在插入吧 数据多影响性能,这是常情啊
有巢鱼 2013-11-04
  • 打赏
  • 举报
回复
具体采用哪种方案,首先要估计一下你的数据中出现主键重复的可能性有多大。 如果主键重复的可能性很小,那么就采用直接插入,捕获异常的做法。 如果主键重复的可能性很大,那么就先检查主键是否存在,然后再插入的做法。
  • 打赏
  • 举报
回复
引用 5 楼 lp1137917045 的回复:
我也觉得先查询判断后插入如果数据太多的话肯定影响效率,但异常处理的话,我感觉不太合理,更何况违反唯一约束的异常如何捕获?
引用 6 楼 yoxibaga 的回复:
select count(id) from student where id=?1; 此结果作为判断条件,这样查询应该也可以优化下。
很好的回答了 把id加索引
sunbo624 2013-11-04
  • 打赏
  • 举报
回复
直接插入 异常也continue 最后commit
长笛党希望 2013-11-03
  • 打赏
  • 举报
回复
引用 1 楼 huxiweng 的回复:
插入前判断是否存在!
会不会影响效率,比如数据库或execl中已经有10万条数据。每一条遍历,这性能。。。。
yoxibaga 2013-11-03
  • 打赏
  • 举报
回复
select count(id) from student where id=?1; 此结果作为判断条件,这样查询应该也可以优化下。
Coding_Dog 2013-11-03
  • 打赏
  • 举报
回复
我也觉得先查询判断后插入如果数据太多的话肯定影响效率,但异常处理的话,我感觉不太合理,更何况违反唯一约束的异常如何捕获?
qq4645 2013-11-02
  • 打赏
  • 举报
回复
从技术上讲两种方法是都可以达到目的(抛出违反唯一性约束所以知道已经有了),但是从编程优化角度讲一定是先判断是不是存在然后再插入!
teemai 2013-11-02
  • 打赏
  • 举报
回复
插入前判断是否存在!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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