在JDBC中使用class.forName

时间:2013-12-08 15:27:43

标签: java class reflection jdbc

以下是连接MySQL数据库的代码

// This will load the MySQL driver, each DB has its own driver
  Class.forName("com.mysql.jdbc.Driver");
  // Setup the connection with the DB
  connect = DriverManager
      .getConnection("jdbc:mysql://localhost/feedback?"
          + "user=sqluser&password=sqluserpw");

我正在学习使用java获取类的反射      的Class.forName()

 Class c = Class.forName("java.awt.Button");

是否使用了语法。

我的问题是为什么MySQL ForName不需要被变量捕获?

2 个答案:

答案 0 :(得分:4)

您的意思是为什么Class对象不会保存到变量中。 因为不需要它。该类只需要加载,实际的Class对象是多余的。

这些天你甚至不需要再做Class.forName()了。如果您使用的是JDBC类型4(纯Java)驱动程序,则会自动从类路径中找到驱动程序。

答案 1 :(得分:4)

通过调用forName(),您可以强制该类初始化(这不仅仅是加载它)。在该过程中,运行一些静态初始化程序,它使用JDK中的JDBC管理器代码注册该特定类。这使得驱动程序实例在JDK内部可用,并且在后面的所有代码中都隐式使用它。

不可否认,依赖于不直观的Reflection调用是JDBC作者的一个糟糕的设计,但在Java的早期,选择的次数比现在少,Java的世界也不那么强硬。这是一种尚未引起严肃采用的语言。