Ste*_*hen 1 java mysql jdbc subclassing
我想创建一个扩展 CallableStatement 对象的子类。我想这样做,以便我可以覆盖 execute 和 executeQuery 方法来跟踪每个 SP 调用的一些指标。
目前我有如下代码:
Connection db = poolingDataSource.getConnection();
CallableStatement cstmt = db.prepareCall("{call pSampleStoredProc()}");
ResultSet rs = cstmt.executeQuery();
Run Code Online (Sandbox Code Playgroud)
其中 poolingDataSource 来自 apache commons dbcp 包。我的实现是使用 JDBC 连接到 MySQL 数据库中的。
目前,prepareCall 方法返回一个 com.mysql.jdbc.JDBC4CallableStatement。我希望能够更改它,以便它返回一个我自己的类,该类扩展了 JDBC4CallableStatement 但覆盖了 execute() 和 executeQuery() 方法。
有关执行此操作的最佳方法的任何想法?
如果您需要执行此操作的地方数量可管理,我建议一种简单的方法(比尝试让该数据库驱动程序返回您的自定义 CallableStatement 对象更容易)是制作一个包装器或装饰器来包装您从 db 获得的 CallableStatement 对象。基本上创建一个实现 CallableStatement 的所有方法的类,将 CallableStatement 对象作为其构造函数的参数,并将所有方法调用委托给另一个对象,但对于 execute() 和 executeQuery() 你也在委托给其他对象的 execute() 方法之前和之后调用您的日志记录方法。
当然还有其他方法可以做到这一点,这让我觉得更容易。
Connection db = poolingDataSource.getConnection();
CallableStatement cstmt = db.prepareCall("{call pSampleStoredProc()}");
MyCallableStatement mystmt = new MyCallableStatement( cstmt );
ResultSet rs = mystmt.executeQuery();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1140 次 |
| 最近记录: |