JAVA学习 -- JDBC获取数据库连接的5种方式

Posted 庸人冲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA学习 -- JDBC获取数据库连接的5种方式相关的知识,希望对你有一定的参考价值。

方式一

@Test
public void testConnection1() throws SQLException {
    // 1. 创建Driver接口的实例, Driver接口是Sun公司定义的接口, 具体的实现类是各数据库厂家定义的。
    Driver driver = new com.mysql.jdbc.Driver(); // 指定mysql实现类的全类名

    // 2. 指定数据库url
    String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"; // 指定数据库的地址, 【mysql8一定要在后面加上时区】

    // 3. 将用户名和密码以键值对的形式封装在Properties中
    Properties info = new Properties();  // java.util.Properties

    // 键的字段名不能变,否则不识别
    info.setProperty("user","root");   // 设置用户名, 值为自己的数据库用户名
    info.setProperty("password","1234"); // 设置密码, 值为自己的密码
    // 4. 通过Driver类的实例调用connect 方法
    //    driver.connect(String url,Properties info);
    Connection connect = driver.connect(url, info); // connect方法返回的是Connection接口具体实现类的对象、

    System.out.println(connect); // 测试连接是否成功, 成功会输出Connection接口实现类对象的地址

    // 连接成功: com.mysql.jdbc.JDBC4Connection@1e4a7dd4
}

方式二:对方式一的改进

// 方式二: 对方式一的迭代
    // java程序的代码中尽量不要出现第三方的API 【提高程序的可移植性】
    // 方式一中com.mysql.jdbc.Driver 就是mysql提供的第三方API, 解决方式是使用反射动态的获取Driver实现类对象
    @Test
    public void testConnection2() throws Exception {
        // 1. 获取Driver接口的实现类的对象, 【使用反射】
        Class clazz = Class.forName("com.mysql.jdbc.Driver");
//        Driver driver = (Driver) clazz.newInstance();
        // JDK9以上使用getDeclaredConstructor().newInstance() 获取类的对象
        Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();

        // 2. 提供要连接的数据库
        String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";

        // 3. 提供连接需要的用户名和密码
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","1234");

        // 4. 获取连接
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }

方式三: 使用DriverManager替换Driver

java.sql.DriverManager是Sun公司提供的一个【类】,用于提供对一系列数据库管理的基础服务。

步骤:

  1. 调用DriverManager类中的registerDriver()静态方法。(注册驱动

  1. 调用getConnection方法获取Connection实现类的对象。

// 方式三: 使用DriverManager替换Driver
// java.sql.DriverManager是Sun公司提供的一个【类】,用于提供对一系列数据库管理的基础服务

@Test
public void testConnection3() throws Exception {


    // 1. 注册驱动

    // 1) 获取Driver的实现类对象
    Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
    Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
    // 2) 调用registerDriver()方法, Driver实现类对象作为参数
    DriverManager.registerDriver(driver); // 注册驱动


    // 2. 获取连接
    // 1)提供getConnection()方法需要的三个连接的基本信息
    String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
    String user = "root";
    String password = "1234";
    // 2)调用DriverManager.getConnection()方法获取Connection实现类对象
    Connection connection = DriverManager.getConnection(url, user, password);

    System.out.println(connection);
}

方式四:在方式三的基础上进行优化

Driver实现类被加载到内存时, 会调用其内部的静态代码块,自动注册驱动。

mysql中Driver的实现:

// 方式四: 在方式三的基础上进行优化
@Test
public void testConnection4() throws Exception {

    // 1. 加载Driver到内存中
    Class.forName("com.mysql.jdbc.Driver");
    // 相较于方式三可以省略如下的操作:
    // Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
    // DriverManager.registerDriver(driver);

    // 2. 获取连接
    // 1)提供getConnection()方法需要的三个连接的基本信息
    String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
    String user = "root";
    String password = "1234";
    // 2)调用DriverManager.getConnection()方法获取Connection实现类对象
    Connection connection = DriverManager.getConnection(url, user, password);

    System.out.println(connection);
}

tips: 其实连Driver类加载的步骤都可以省略,因为在mysql驱动jar包中META-INF\\services\\ 路径下有一个java.sql.Driver的文件,里面保存了Driver类的包路径,当加载jar包时,会通过这个包路径将该类自动加载到内存中,但是!不推荐,因为不确保其他数据库可以这样操作。

方式五(Final版

将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接。

步骤:

  1. 在src路径下创建.properties文件(后期使用.xml文件编写)

    注意:如果在module下创建配置文件,当程序部署到tomcat服务器时该配置文件会缺失。


  1. 编写配置文件

  2. 读取配置文件中的4个基本信息

// 方式五:
@Test
public void testConnection5() throws Exception {
    // 读取配置文件中的4个基本信息
    // 1. 使用系统类加载器加载配置文件
    ClassLoader classLoader = ConnectionTest.class.getClassLoader();
    InputStream is = classLoader.getResourceAsStream("jdbc.properties");

    // 2. 创建Properties实例
    Properties pros = new Properties();
    // 1)加载配置文件
    pros.load(is);

    // 2)获取指定key的值(Properties继承了Hashtable)
    String user = pros.getProperty("user");
    String password = pros.getProperty("password");
    String url = pros.getProperty("url");
    String driverPath = pros.getProperty("driver");

    // 3. 加载驱动
     Class.forName(driverPath);

     // 4. 获取连接
    Connection connection = DriverManager.getConnection(url, user, password);
    System.out.println(connection);

    // 这种方式的好处:
    // 1. 当需要更换数据库时,只需要更改配置文件,无须更改上面的代码,实现了数据与代码的分离,实现了解耦。
    // 2. 程序在部署到服务器时,会将代码编译生成的字节码文件打包,如果配置信息写在代码里,当需要修改配置信息时,就得重新打包。而将配置信息写在配置文件中,则不需要更改打包好的字节码文件
}

以上是关于JAVA学习 -- JDBC获取数据库连接的5种方式的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记8.1.2 初探JDBC - JDBC编程步骤

Java学习笔记8.1.2 初探JDBC - JDBC编程步骤

第二节——JDBC

Java -- JDBC 学习--数据库连接池

Java学习总结(十九)——JDBC操作数据库,预编译的使用,事务,常见的连接池

Java数据库的连接JDBC