如何在Java连接上执行自动提交时获得通知?

如何在Java连接上执行自动提交时获得通知?,java,sql,jdbc,database-connection,Java,Sql,Jdbc,Database Connection,我想知道是否有办法注册到自动提交事件 有观察员吗?也许我装饰了一个自动提交连接或语句以便得到通知?装修的方法是什么 我尝试侦听Connection.commit(),但在语句执行时没有调用它 谢谢。Alik.自动提交意味着在每个语句执行结束时都有一个隐含的提交。据我所知,没有您可以监听的事件,您也不能期望任何人在内部调用Connection.commit(),因为自动提交发生在您正在使用的RDBMS堆栈中的某个地方,甚至可能发生在服务器上 因此,为了向JDBC添加自动提交事件,您必须修饰可能导致

我想知道是否有办法注册到自动提交事件

有观察员吗?也许我装饰了一个自动提交连接或语句以便得到通知?装修的方法是什么

我尝试侦听
Connection.commit()
,但在语句执行时没有调用它


谢谢。Alik.

自动提交意味着在每个语句执行结束时都有一个隐含的提交。据我所知,没有您可以监听的事件,您也不能期望任何人在内部调用
Connection.commit()
,因为自动提交发生在您正在使用的RDBMS堆栈中的某个地方,甚至可能发生在服务器上

因此,为了向JDBC添加自动提交事件,您必须修饰可能导致执行语句的每个函数,并查看执行的SQL是以
UPDATE
INSERT
还是
DELETE
动词开始的。(基本上,除了选择
之外,其他任何选项都可以)

我过去装饰JDBC的方式如下:

  • 制作每个JDBC接口的副本,从中创建一个类,为每个方法创建一个具体的函数,该方法将引用委托给JDBC接口。使用大量搜索和替换,或者可能使用支持录制和重放宏的编辑器

  • 定义自己的驱动程序,并使用自己的驱动程序名(如“jdbcdeco”)向JDBC注册

  • 建立以下约定:驱动程序的连接字符串将是
    “jdbcdeco:
    ,后跟要修饰的驱动程序的连接字符串。因此,如果要修饰的连接的连接字符串是
    “jdbc:mysql://localhost/test“
    则必须指定以下连接字符串:
    ”jdbc:jdbcdeco:mysql://localhost/test“

  • JDBC将实例化您的驱动程序,并向其传递连接字符串,该字符串以
    “jdbcdeco:”
    开头。您去掉了
    “jdbcdeco:”
    部分,剩下的是另一个连接字符串,您可以使用它再次传递给JDBC,以便创建要修饰的实际连接


  • 祝你好运,玩得开心

    简短回答-不存在自动提交时注册收听的方式。正如Mike在回答中提到的,如果您想捕获编写自定义代码所需的每一个提交,那么无论您是否愿意付出那么多努力,都必须进行调用

    一个更简单的解决方法是将连接上的AutoCommit设置为off,但这不是您所要求的:)