假设我使用Java.sql
将大量线程插入到mysql数据库中。在我执行插入后,我想知道刚刚插入的记录的主键。我可以在insert查询返回的ResultSet上使用getRow()。但是,这个线程安全吗?或者我应该触发另一个select语句来查找刚插入的记录的主键吗?
答案 0 :(得分:3)
ResultSet不会在javadoc上宣传为线程安全,因此假设它不是。如果您有10个线程插入,并以某种方式获得相同的结果集......会发生奇怪的事情(或者至少不能保证是正确的)。
但是,如果你有10个线程,每个都进行自己的OWN插入,并且每个线程都拥有自己的ResultSet ..你没事。请记住,线程安全通常与共享同一个OBJECT有关,而不仅仅是同一个类。 ArrayList不是线程安全的,但是如果你有10个不同的线程和10个不同的ArrayList,你没问题。与ResultSet相同。
答案 1 :(得分:0)
我认为getRow()不应该是正确的。 getId()将是我的选择,因为行ID可能与生成的主键不同。
我不相信java.sql中的任何实现都是线程安全的;连接肯定不是。
请务必在事务上下文中进行INSERT。
你需要注意你的隔离级别。如果您不知道这意味着什么,请检查javadocs中的java.sql.Connection。