Java 覆盖jdbc第三方jar中的方法

Java 覆盖jdbc第三方jar中的方法,java,reflection,Java,Reflection,我想通过ebean访问我的数据库。我的数据库是GuptaSQLBASE11.5(不知道您是否不知道)。问题是古普塔的人都很懒。因此,他们对java.sql.DatabaseMetaData.getDatabaseMajorVersion的实现抛出了一个SqlException:unsupported方法。是否可以在我的应用程序中覆盖该方法,使其仅返回11?我已经尝试用这个方法实现我自己的jdbc.gupta.sqlbase.SqlbaseDatabaseMetaData类,这个方法确实有效,但我

我想通过ebean访问我的数据库。我的数据库是GuptaSQLBASE11.5(不知道您是否不知道)。问题是古普塔的人都很懒。因此,他们对java.sql.DatabaseMetaData.getDatabaseMajorVersion的实现抛出了一个SqlException:unsupported方法。是否可以在我的应用程序中覆盖该方法,使其仅返回11?我已经尝试用这个方法实现我自己的jdbc.gupta.sqlbase.SqlbaseDatabaseMetaData类,这个方法确实有效,但我无法实现接口需要的所有方法。这就是为什么我通过ebean进行的所有选择都返回null。所以我只需要覆盖getDatabaseMajorVersion方法。IMHO没有意见实现一个只扩展gupta类的子类,因为我的类永远不会被接受

谢谢你给我的建议。
向您致意,Marco

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

为方便起见,您还可以为
连接编写包装,并重写
连接.getMetaData()
,这将返回包装的实例


如果您想玩,还可以注册一个重写连接URL的实现,并返回
连接的实例

需要什么功能
getDatabaseMajorVersion()
要返回值吗?ebean的初始化过程会调用此方法。除了getDatabaseMajorVersion(),您是否尝试为每个方法中都委托给真实实例的类编写包装器?如果在同一个包中实现具有相同名称的包装器,我不确定这是如何实现的!?非常感谢你。“我尝试了代理解决方案,效果很好。”Marco面临着类似的问题。你能提供你的实现吗?