覆盖jdbc第三方jar中的方法

时间:2013-03-17 14:56:50

标签: java reflection

我想通过ebean访问我的数据库。我的数据库是Gupta SQLBase 11.5(不知道你是否不知道它)。问题是古普塔的家伙非常懒惰。因此,它们对java.sql.DatabaseMetaData.getDatabaseMajorVersion的实现会抛出SqlException:unsupported方法。是否有可能在我的应用程序中覆盖该方法,以便它只返回11?我已经尝试使用此方法实现我自己的jdbc.gupta.sqlbase.SqlbaseDatabaseMetaData类,这确实有效,但我无法实现接口所需的所有方法。这就是为什么我通过ebean做的所有选择都返回null。所以我只需要覆盖getDatabaseMajorVersion方法。恕我直言,没有意见实现一个只扩展gupta类的子类,因为我的类永远不会被采用。

感谢您提供的所有建议。 最好的问候,Marco

1 个答案:

答案 0 :(得分:1)

您可以使用delegate patternProxy(反射)编写包装器。您将需要拦截对“overriden”方法的任何调用,并将其他方法委托给基础对象。

为方便起见,您还可以为Connection编写一个包装器,并覆盖Connection.getMetaData(),它应该返回包装器的实例。

如果您想要花哨,您还可以注册Driver的实现,该实现重写连接URL并返回Connection的实例。