2017-07-18 47 views

回答

2

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

所以,为了一个自动提交事件添加到JDBC你有装饰,可能导致被执行的语句的每一个功能,并看到被执行的SQL是否开始与UPDATEINSERTDELETE动词。 (基本上,任何事情,但SELECT。)

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

  1. 让每一个JDBC接口的副本,创建一个类出来,创建每个方法的具体函数委派给一个JDBC接口的引用。使用大量的搜索和替换或可能是一个支持录制和重播宏的编辑器。

  2. 使用自己的驱动程序名称(如“jdbcdeco”)定义自己的驱动程序,并使用JDBC注册它。

  3. 建立以下约定:驱动程序的连接字符串将为"jdbcdeco:",后跟要装饰的驱动程序的连接字符串。所以,如果你想装饰的连接的连接字符串为"jdbc:mysql://localhost/test"那么下面的连接字符串必须指定:"jdbc:jdbcdeco:mysql://localhost/test"

  4. JDBC将实例你的驱动程序,它会通过它的连接字符串,它与"jdbcdeco:"开始。你剥离了"jdbcdeco:"部分,并且你留下了另一个连接字符串,为了创建将要装饰的实际连接,您使用该连接字符串再次传递给JDBC。

祝你好运,玩得开心!

0

简短的回答 - 没有这样的方式来注册听到自动提交。正如Mike在答复中所提到的,如果您想捕获每一次需要编写自定义代码的提交,则无论您是否愿意经历那么多努力,您都必须进行调用。

更简单的解决方法是将setAutoCommit设置为关闭连接,但这不是你要求的:)。

相关问题