在编写与数据库交互的应用程序时,我能使其工作的唯一方法是在每个与数据库交互的方法中编写Class.forName("com.mysql.jdbc.Driver")
。
这是唯一的方法吗?还是有更简单的方法?
答案 0 :(得分:7)
这条线不可行。 jdbc:mysql://localhost/phone_book
不是有效的类名。执行此方法时,您将获得异常。
如果您的意思是Class.forname("com.mysql.jdbc.Driver")
,它所做的就是确保类加载器加载该类。加载类时,将执行其静态块,此静态块将MySQL驱动程序注册到JDBC API。做一次就足够了。加载一个类后,它就被加载了。第二次加载它不会改变任何东西。
答案 1 :(得分:3)
调用Class.forName(<jdbcDriverClass>)
用于加载JDBC驱动程序(实现java.sql.Driver
接口)。加载JDBC驱动程序类会导致在Driver
内调用静态初始化程序,并且大多数(如果不是全部)所有驱动程序都在静态初始化程序中调用DriverManager.registerDriver(jdbcDriverInstance)
。
相关的方法调用用于向DriverManager
注册JDBC驱动程序,允许DriverManager.getConnection
方法返回与JDBC驱动程序支持的数据库的连接。每个JDBC驱动程序只识别一个/一些JDBC URL连接格式,当您调用DriverManager.getConnection(...)
时,DriverManager
类循环遍历注册的所有驱动程序,并且只循环识别连接URL格式的驱动程序将返回连接。
通过上面的说明,Class.forname("jdbc:mysql://localhost/phone_book")
在这种情况下没有任何意义,因为jdbc:mysql://localhost/phone_book
不是JDBC驱动程序类。相反,它是一种连接URL格式。由于您对访问MySQL数据库实例感兴趣,因此应使用MySQL Connector / J驱动程序的驱动程序类:Class.forName("com.mysql.jdbc.Driver")
。当您需要访问数据库实例时,您应该将JDBC URL用作:DriverManager.getConnection("jdbc:mysql://localhost/phone_book");
。您可以使用DriverManager.getConnection(...)
方法的三参数变体传递用户ID和密码。