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

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

...全文
18603 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
  • 打赏
  • 举报
回复
插入前判断是否存在!
程序 = 数据结构 + 算法  程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战与代码实现与企业应用。程序 = 数据结构 + 算法                ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可以学习很多语言,很多框架,但招聘不会考你用5种语言10种框架实现同一个功能。真正让程序员有区分度,企业招聘万年不变的重点 —— 算法与数据结构。算法代表程序员水平的珠穆朗玛。 本视频由微软全球最有价值专家尹成录制,拒绝念PPT,代码实战数据结构与算法导论。除了传统数据结构算法,加入高并发线程安全数据结构,分布式负载均衡算法,分布式哈希表,分布式排序等等现代算法。  算法,晦涩难懂,却又是IT领域受重视的素养之一。可以说,算法能力往往决定了一个程序员能够走多远。因此,BAT/FLAG等国内外各大名企非常喜欢在面试环节考核求职者的算法编程,这也成为了无数准程序员们过不去的一道“坎”。如何入门并成为一名出色的算法工程师?但无论半路出家还是科班出身,除学生时代搞算法竞赛的同学外真正用心学习过算法与数据结构太少太少。对于后期想要学习算法与数据结构却不得不面对以下问题:没有自己的知识框架,无法关联知识点,学习效率低有疑问而无人解答,有问题无法理解全靠猜测,一个问题卡好几天市面上资料题解质量参差不齐,正确性未可知Google算法-工程师尹成大哥学习算法。

67,512

社区成员

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

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