JDBC还在使用Class.forName?

原创
2020/08/26 19:37
阅读数 164

很多朋友自己管理连接的时候,还是习惯使用下面的方式来获取连接。

@Test
public void testGetConnection() throws SQLException {
//        Class.forName("com.mysql.jdbc.Driver");//新版本不需要了
    Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF8", "username", "password");
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("select id from test");
    while (resultSet.next()){
        System.out.println(resultSet.getInt("id"));
    }
}

其实在新版本的JDK中已经不需要,Class.forName("com.mysql.jdbc.Driver");这种非常不优雅的代码了。

注意:这里说的JDK新版本,不是指高版本,而是新发行的JDK版本,我检查了1.6和1.7的新版本的源码,发现都已经做了处理。

下面的方法是在ServiceLoader中的方法,JDBC的Driver就通过它加载。

如果不了解这个可以参考一下:Java SPI

nextService

我们可以看到通过ServiceLoader查找的类,已经加载了,不过并没有执行初始化。

所以,在我们的代码中,并不需要:

Class.forName("com.mysql.jdbc.Driver");

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部