代码之家  ›  专栏  ›  技术社区  ›  Shawn D.

JDBC&死锁避免问题(基础)

  •  4
  • Shawn D.  · 技术社区  · 14 年前

    我觉得有一种方法可以为访问多个表以避免死锁的查询指定锁顺序,但我不知道这是创建表时在DB级别设置的类型,还是必须显式地处理JDBC查询。

    i、 e.是否有一个全局设置或用于指定锁顺序的东西,或者是否必须在每个查询/更新上进行设置。

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  5
  •   BalusC    11 年前

    其他 交易。如果 执行查询时事务未完成,则 事务将无法完成自己的查询。

    我不确定JDBCTemplate是如何管理事务的,但是JDBC连接在默认情况下不是事务性的。一旦你设置了 Connection#setAutoCommit() false (或将其配置为默认),则事务将在调用时启动并完成 Connection#commit()

    为了避免死锁,规则1是避免混合 SELECT INSERT/UPDATE/DELETE 单个事务中的语句。当第一眼看到混合是强制性的,那么你至少应该试着把它重写成一个单一的/嵌套的语句。这通常是可能的。这样,您就不需要在事务中执行这些查询。

    SQLException 为了这个。