java - JDBC DriverManager 无法访问不同包中的类

标签 java jdbc bytecode javaagents

我一直在尝试检测 getconnection 方法以获取在 JDBC 连接建立期间传递的 DB_URL。据我所知,DriverManager 的检测工作正常,因为注入(inject)部分工作正常而不会引发任何异常。但是当涉及到执行该行时,在我的例子中调用我定义的包中类的 public static 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)

但同样的注入(inject)对其他类来说效果很好。小帮助将不胜感激。

这就是我在检测期间注入(inject)的内容。

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

最佳答案

您向系统类加载器加载的 java.sql.DriverManager 类添加了一个方法调用。引导类加载器看不到由它作为父级的系统类加载器加载的任何类。

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

关于java - JDBC DriverManager 无法访问不同包中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32732317/

相关文章:

lua三元运算符的可能性

java - 使用invokedynamic时的泛型信息

java - 为什么一根长字符串比许多小字符串占用更多空间?

java - 调用构造函数但没有输出

sql-server - 使用 JDBC 连接到 SQL Server LocalDB

java - 抽象方法和带有 UnsupportedException 的方法哪个更好?

java - 尝试使用 H2 数据库更新 JDBC 结果集时出现异常

java - JDBC 使用 MySQL 选择批处理/获取大小

java - 如何在android中使用apache POI在现有的xls或xlsx文件上写入数据

Java 使用 if else 语句的方法返回值