Java Executor服务 - 多个线程 - 插入如果不存在Mysql

时间:2015-08-04 06:47:11

标签: java mysql multithreading

我的线程池中有10个线程,并且正在执行一个任务,具体取决于它在mysql中的条目。问题是如果mysql数据库中存在该条目,则不需要处理,控件将从那里返回。

我在表中使用了唯一约束但是如何在应用程序级别处理它?<​​/ p>

除了catcin sqlintegrityconstraintviolationexception之外还有什么办法吗?

2 个答案:

答案 0 :(得分:0)

在线程的每个任务中使用单独的连接。 使用Statement.getUpdateCount()或int insertCount = statement.executeUpdate(...)

答案 1 :(得分:0)

这可以通过多种方式完成,但每种方法都有其优点和缺点。

1)将您在数据库中设置的主键或唯一约束存储在内存中。在插入记录之前,您始终可以检查条目是否已存在。在这种情况下,我们必须确保没有记录通过后门插入数据库(所有记录都要通过您的应用程序插入或更新)。此外,当您的数据库越来越大时,它也会消耗大量内存。

2)在插入记录之前查询数据库。这是最安全的方法,但是有两个操作(select&amp; insert)用于插入新记录。

3)盲目插入记录。在这种情况下,将抛出完整性异常并且应该正确处理它。

在上述方法中保留所有优点和缺点,选项“3”对我来说似乎是一个更好的解决方案,但您可以根据自己的需要做出决定。