在加载jdbc:odbc驱动程序时,Class类中的forName()方法做了什么?
我正在学习如何使我的Java应用程序与MS Access数据库通信。
我不确定一个方法,Class.forName()方法。 我传递的参数是“sun.jdbc.odbc.JdbcOdbcDriver”,它加载用于访问数据库的jdbc:odbc桥。
Class.forName()究竟做了什么,为什么需要它?
非常感谢你。
Class.forName()
使ClassLoader将类加载到内存中。 JDBC驱动程序类具有静态初始化程序,它们使用DriverManager注册它们以供进一步使用。 使用Class.forName()
并使用DriverManager.getConnection("jdbc:*", database, username, password)
, jdbc:
已经加载到内存中。
Class.forName()
用于动态加载类。 例如,您调用了Class.forName("z")
,这将导致类z被初始化并返回相应的对象。
Class.forName()使用reflection来加载给定名称的类。 它返回一个Class对象。 看到这个 。
在您的情况下,它允许您在运行时加载特定的驱动程序,而无需对驱动程序类型进行硬编码。 您只需将驱动程序名称作为参数传递。
它使用reflection
来实例化sun.jdbc.odbc.JdbcOdbcDriver
类,使用String格式的类名。
这使您的代码Driver
类独立,并允许您在外部传递驱动程序类名作为String参数(这是我们通过配置传递连接详细信息时的标准行为)。