JDBC DriverManager无法访问其他包中的类

时间:2015-09-23 06:17:28

标签: java jdbc bytecode javaagents

我一直在尝试使用getconnection方法来获取在JDBC连接建立期间传递的DB_URL。据我所知,DriverManager的检测工作正常,因为注入部分工作正常而不会抛出任何异常。但是当涉及到执行该行时,在我的情况下调用由我定义的包中的类的公共静态void方法,它说

Exception in thread "main" java.lang.NoClassDefFoundError: testInjection/TestClass
    at java.sql.DriverManager.getConnection(DriverManager.java:206)
    at testInstrumentation.TestConnector.main(TestConnector.java:30)

但同样的注射适用于其他类。很少有人会非常感激。

这就是我在仪器仪表中注入的内容。

method.insertAt(1, true, "testInjection.TestClass.setConnetionURL($1);");

1 个答案:

答案 0 :(得分:1)

您添加了对系统类加载器加载的java.sql.DriverManager类的方法调用。引导类加载器无法看到系统类加载器加载的任何类,它们是父类。

要解决此问题,您需要将testInjection.TestClass添加到引导类加载器。您可以通过设置引用此类的jar文件的命令行值-Xbootclasspath或使用代理的Instrumentation实例以编程方式执行此操作。