Home  >  Article  >  Java  >  A brief introduction to DriverManager in Java

A brief introduction to DriverManager in Java

黄舟
黄舟Original
2017-01-17 15:09:463183browse

happy smile

爱神和月老

A: "Do you know why there are more divorces in Western countries than in China?"

B: "This It’s not simple, because the Western Cupid is a doll, while the Chinese one is an old man under the moon, and of course he has much more experience! "

Ask a question

Simple learning of the DriverManager class? ? ?

Solve the problem

DriverManager manages a set of basic services of the JDBC driver in the java.sql package

[code]package com.evada.de;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Enumeration;

/**
 * 用静态工厂方法管理一个唯一的可重用的连接
 * Created by Ay on 2016/5/1.
 */
public class ConnUtils{

private ConnUtils(){}
private static Connection con;
//在静态代码块中创建与数据库的连接
static{
    try{
        //postgresql驱动名称
        Class.forName("org.postgresql.Driver");
        //数据库连接路径
        String url = "jdbc:postgresql://127.0.0.1:5432/postgres";
        //用户名和密码
        con = DriverManager.getConnection(url, "postgres", "888888");
    }catch(Exception e){
        throw new RuntimeException(e.getMessage(),e);
    }
}
//使用一个静态方法-静态工厂方法,返回connection实例
public static Connection getCon(){
    return con;
}

//main函数测试用
public static void main(String[] args) {
    //获取所有的数据库驱动
    Enumeration<Driver> driverEnum = DriverManager.getDrivers();
    //打印出所有驱动信息
    while(driverEnum.hasMoreElements()){
        System.out.println(driverEnum.nextElement());
    }
}
}

Running results:

[code]org.mariadb.jdbc.Driver@7cef4e59
com.alibaba.druid.proxy.DruidDriver@3ada9e37
com.alibaba.druid.mock.MockDriver@4ec6a292
org.postgresql.Driver@71c7db30

Explanation , because our project package has the database driver as shown below, the following information will be printed

A brief introduction to DriverManager in Java

A brief introduction to DriverManager in Java

A brief introduction to DriverManager in Java

##The difference between the two:


DriverManager.registerDriver(new Driver()); 
Class.forName(“com.mysql.jdbc.Driver”);

org.postgresql.Driver class source code is as follows. It can be seen that postgresql uses a singleton form and a new driver Driver, which means that when connecting to the database, only After creating a new Driver


[code]static {
        sharedTimer = new SharedTimer(logger);

        try {
            //注册
            register();
        } catch (SQLException var1) {
            throw new ExceptionInInitializerError(var1);
        }

        protocols = new String[]{"jdbc", "postgresql"};
    }

    public static void register() throws SQLException {
        if(isRegistered()) {
            throw new IllegalStateException("Driver is already registered......);
        } else {
            Driver registeredDriver = new Driver();
            DriverManager.registerDriver(registeredDriver);
            registeredDriver = registeredDriver;
        }
    }

, let’s take a look at the source code of DriverManager. It will package the Driver into DriverInfo,

[code]//
public static synchronized void registerDriver(java.sql.Driver driver,
            DriverAction da)
        throws SQLException {

        /* Register the driver if it has not already been added to our list */
        if(driver != null) {
            //将驱动包装到DriverInfo中
            registeredDrivers.addIfAbsent(new DriverInfo(driver, da));
        } else {
            // This is for compatibility with the original DriverManager
            throw new NullPointerException();
        }

        println("registerDriver: " + driver);

    }

Class.forName(“com.mysql.jdbc.Driver” );


Conclusion: DriverManager.registerDriver(new Driver()); Adding a new Driver is a waste; and Class.forName("com.mysql.jdbc.Driver"); singleton form is more recommended...

The above is a brief introduction to Java’s DriverManager. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn