以下是连接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不需要被变量捕获?
答案 0 :(得分:4)
您的意思是为什么Class
对象不会保存到变量中。
因为不需要它。该类只需要加载,实际的Class
对象是多余的。
这些天你甚至不需要再做Class.forName()
了。如果您使用的是JDBC类型4(纯Java)驱动程序,则会自动从类路径中找到驱动程序。
答案 1 :(得分:4)
通过调用forName()
,您可以强制该类初始化(这不仅仅是加载它)。在该过程中,运行一些静态初始化程序,它使用JDK中的JDBC管理器代码注册该特定类。这使得驱动程序实例在JDK内部可用,并且在后面的所有代码中都隐式使用它。
不可否认,依赖于不直观的Reflection调用是JDBC作者的一个糟糕的设计,但在Java的早期,选择的次数比现在少,Java的世界也不那么强硬。这是一种尚未引起严肃采用的语言。