当前位置: 首页 > 面试题库 >

Class.forName()如何工作?

经昱
2023-03-14
问题内容

我刚刚了解到java.sql package。它用于Class.forName()动态加载扩展的驱动程序DriverManager。然后我们得到使用DriverManager.getConnection()方法的连接。

那么整个事情如何运作?
DriverManager类如何知道如何在不使用实际驱动程序的类名的情况下获取连接。

我们也可以将Class.forName()用于自定义应用程序…如果通过示例进行解释,我将非常高兴。


问题答案:

Class.forName 只需加载一个类,包括运行其静态初始化程序,如下所示:

class Foo {
    static {
        System.out.println("Foo initializing");
    }
}

public class Test {
    public static void main(String [] args) throws Exception {
        Class.forName("Foo");
    }
}

您正在谈论的所有其余过程都是特定于JDBC的。驱动程序-
实现Driver但不扩展DriverManager-只需使用即可注册适当的实例DriverManager.registerDriver。然后,当DriverManager需要查找用于特定连接字符串的驱动程序时,它将connect依次调用每个已注册的驱动程序,直到成功并返回非空连接为止。

请注意,这种注册驱动程序的方式相当过时-
在文档中DriverManager查找获取数据源的更现代方式。



 类似资料:
  • 问题内容: 我在Netbeans 7.2上遇到此错误,它说ClassNotFoundexception和InstantationException。我真的在这个问题上陷入困境。请帮助我。 问题答案: 那么这个简单的方法呢? 我也想知道为什么您要用这种方式连接数据库?最好让服务器对其进行管理。 首先像这样配置(如果您使用的是tomcat): 然后,简单地从servlet / etc中的该资源获取连接

  • ./tested/resta.java 。/tested/suma.class 。/tested/resta.class 。/test/testsuma.class 。/test/testsuma.java 。/test/testsuma.class 。/test/testsuma.class 。/spumevaluador.class 。/spumevaluador.java 当我运行Spume

  • 问题内容: 我想使用其名称创建指定类的实例。我的代码如下所示。 我收到编译器警告。我这样做正确吗?甚至有可能使用类的名称并获得该类型的实例,因为我不认为编译器有任何方式可以知道类型是什么? 谢谢 问题答案: 我认为第一种方法应如下所示: 没有那些讨厌的类型安全警告,您不能使用类型参数…进行向上的类型转换。 顺便说一句,如果您忽略了这些警告,则create方法可能会创建某个类的实例,该类与调用方使用

  • 问题内容: Java程序中的“思考”如下: 我期望输出如下: 但是得到 显然,try块抛出ClassNotFoundException,这是意外的。有什么想法为什么代码会抛出此错误而不是像预期的那样初始化Gum类? 问题答案: 你的类在包,所以他们完全合格的名称,和。仅接受标准名称: 参数: -所需类的完全限定名称。 将您的代码更改为:

  • 问题内容: 问题答案: 完全不与JDBC直接相关。它只是加载一个类。 大多数JDBC驱动程序类通过调用在自己的静态初始化器中注册自己registerDriver()。 是真正不需要调用的真正调用(除非你编写自己的JDBC驱动程序)。 请注意,在JDBC 4 中,如果你的JDBC驱动程序是最新的,则不需要它们中的任何一个,因为可以使用服务定位机制找到驱动程序(即,只需忽略该调用并照常打开连接)。有关

  • 问题内容: 我上课简单。然后,我尝试编译并运行它,看到ClassNotFoundException。 我正在使用Windows cmd: 我做错了什么?因此,这是postgrsql库 https://www.dropbox.com/s/idx5l0kub5rn1b8/postgresql.jar?dl=0 问题答案: 在命令行上, 应该 而且,因为它包含,所以当您使用它时,可以将其删除 根据Jav