java - 在 Java 程序中使用 JDBC 驱动程序是否可以在没有反射的情况下工作?

标签 java jdbc dynamic-loading

当我们动态加载一个.class类文件时,需要使用反射来访问类中定义的方法是否正确?

当我们在 Java 程序中使用 JDBC 驱动时,

  • 如果我是对的,JDBC 驱动程序也在后台动态加载。
  • 但我们永远不需要使用反射来访问 JDBC 驱动程序中定义的方法。相反,我们导入 java.sql 并访问 java.sql 中定义的类和方法。

在引擎盖下,是否正在进行反射?如果不是,它如何在没有反射的情况下工作?

一般来说,当我们动态加载一个.java类文件时,我们如何消除或隐藏使用反射来访问类中定义的方法,就像JDBC驱动程序一样?

顺便问一下,JDBC 驱动程序是否准确地定义了一个类?

谢谢。

最佳答案

JDBC驱动需要实现java.sql.Driver接口(interface)(例如 oracle.jdbc.OracleDriver )。除此之外,JDBC 驱动程序代码只是普通的 Java 代码。它可以使用反射或任何其他 Java 语言功能。由驱动程序供应商决定是否值得,例如使用 Java 8 中引入的类将使其仅与 Java 8+ 兼容。

什么是和不是动态加载取决于 JVM 和 ClassLoader 的实现。某些技术(如 OSGI)通过实现允许卸载部分应用程序的 ClassLoader 来提供更大的灵 active 。

加载 JDBC 驱动程序类应该很少发生,并且由 JVM 缓存,因此加载驱动程序的反射调用的成本应该可以忽略不计。单个 SELECT 1 查询的开销将比加载驱动程序字节码高出几个数量级。

关于java - 在 Java 程序中使用 JDBC 驱动程序是否可以在没有反射的情况下工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51314960/

相关文章:

java - 使用 LIMIT AND OFFSET 时,H2 嵌入式数据库不会返回正确的结果

dynamic-linking - 是否可以通过名称唯一标识动态导入的函数?

java - 通过 Service 更新 Android 中的新 RSS 提要

java - 使用 hibernate 计算行或记录

java - 无法从记录集中检索多个结果

c++ - C++ 中 dlsym() 和 dlopen() 的替代方案

linux - 共享库如何知道它所在的位置?

java - 如何在 GWT 的客户端使用 JAXB 注释?

java - Java中的构造函数可以抛出异常吗?

java - 关闭 DAO 层中 jdbc 中结果集的连接