如何在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,但这不是您所要求的:)