Jdbc 当网络关闭时,我如何知道Connection.commit()是否成功?

Jdbc 当网络关闭时,我如何知道Connection.commit()是否成功?,jdbc,commit,Jdbc,Commit,我假设Connection.commit()是这样工作的: 应用程序向数据库发送提交命令 数据库提交当前事务 数据库将提交的令牌发送回应用程序 然后,如果第二步成功,第三步出错(可能是网络问题),那么应用程序没有得到响应,应用程序如何知道事务状态?有一种通用的实践吗?JDBC本身没有任何内容。在某些数据库系统中,如果您有事务id,则可以检查事务的提交状态。您还可以考虑使用XA事务管理器使用两阶段提交(假设您的数据库系统支持真实的两阶段提交)。如果事务准备成功,但提交超时,则资源管理器应该能够恢复

我假设Connection.commit()是这样工作的:

  • 应用程序向数据库发送提交命令
  • 数据库提交当前事务
  • 数据库将提交的令牌发送回应用程序

  • 然后,如果第二步成功,第三步出错(可能是网络问题),那么应用程序没有得到响应,应用程序如何知道事务状态?有一种通用的实践吗?

    JDBC本身没有任何内容。在某些数据库系统中,如果您有事务id,则可以检查事务的提交状态。您还可以考虑使用XA事务管理器使用两阶段提交(假设您的数据库系统支持真实的两阶段提交)。如果事务准备成功,但提交超时,则资源管理器应该能够恢复并重试提交。您也可以使用正常的
    连接再次尝试
    commit()
    ,尽管这可能会产生异常,或者在某些JDBC驱动程序中可能无法工作。JDBC本身没有任何功能。在某些数据库系统中,如果您有事务id,则可以检查事务的提交状态。您还可以考虑使用XA事务管理器使用两阶段提交(假设您的数据库系统支持真实的两阶段提交)。如果事务准备成功,但提交超时,则资源管理器应该能够恢复并重试提交。您也可以简单地使用正常的
    连接再次尝试
    commit()
    ,尽管这可能会产生异常,或者在某些JDBC驱动程序中可能无法工作。