
文章插图

文章插图

文章插图

文章插图
例子
package li.jdbc;import com.mysql.jdbc.Driver;import org.junit.Test;import java.sql.Connection;import java.sql.DriverManager;public class jdbcConn {//方式3 使用DriverManager替换Driver进行统一管理@Testpublic void connect03() throws Exception {//使用反射加载Driver类Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");Driver driver = (Driver)aClass.newInstance();//创建 url和 user 和 passwordString url = "jdbc:mysql://localhost:3306/hsp_db02";String user = "root";String password = "123456";DriverManager.registerDriver(driver);//注册Driver驱动Connection connection = DriverManager.getConnection(url, user, password);System.out.println("方式3="+connection);}}
2.2.4方式4使用Class.forName自动完成注册驱动 , 简化代码
文章插图
例子
//方式4 使用Class.forName自动完成注册驱动 , 简化代码// 这种方式获取连接是使用得最多的 , 推荐使用@Testpublic void connect04() throws Exception {//使用反射加载Driver类//在加载Driver类时 , 完成了注册/*** 在 Driver类的源码中:* 1.静态代码块在类加载时会执行一次* 2.DriverManager.registerDriver(new Driver());* 3.因此 注册Driver的工作已经在底层完成了*static {*try {*DriverManager.registerDriver(new Driver());*} catch (SQLException var1) {*throw new RuntimeException("Can't register driver!");*}*}*/Class.forName("com.mysql.jdbc.Driver");//创建 url和 user 和 passwordString url = "jdbc:mysql://localhost:3306/hsp_db02";String user = "root";String password = "123456";Connection connection = DriverManager.getConnection(url, user, password);System.out.println("方式4="+connection);}
方法4相比于方法3 , 减少了注册驱动的操作 , 但是连接数据库的步骤不是需要注册驱动吗?为什么可以这样呢?在Driver类的源码中 , 我们可以看到有这样的一个静态代码块:

文章插图
而静态代码块在类加载时会执行一次 , 在使用反射加载Driver类时 , 就执行了
DriverManager.registerDriver(new Driver());
语句 。即在加载Driver类时 , 完成了注册 。因此 , 可以在程序中省略注册的步骤 。
注意:
- mysql驱动5.1.6之后连
Class.forName("com.mysql.jdbc.Driver");
也不需要写了
- 从jdk1.5以后使用了jdbc4 , 不再需要显式调用Class.forName()注册驱动 , 而是自动调用驱动jar包下的
META-INF\services\java.sql.Driver
文本中的类名称去注册
文章插图
- 但是还是建议写上
Class.forName("com.mysql.jdbc.Driver");
, 更加明确

文章插图

文章插图
例子首先在src文件夹下面创建一个Properties文件
user=rootpassword=123456url=jdbc:mysql://localhost:3306/hsp_db02driver=com.mysql.jdbc.Driver
方式5:推荐使用
经验总结扩展阅读
- 三伏贴是去医院还是推拿店好 推拿店的三伏贴和医院的有什么区别
- 精梳棉和100%棉的区别
- 古代风的雅称
- 商行和便利店的区别
- 杨梅和海鲜同食会中毒吗 食用杨梅的注意事项
- 买二手空调要注意什么
- 椒盐是胡椒粉和盐么
- 烧鸡和烤鸡的区别
- 沟通四大洋的海峡名称
- 联发科天玑1000plus和骁龙855哪个玩游戏好