9.23JavaWeb之JDBC获取数据库连接方式

9.23JavaWeb之JDBC获取数据库连接方式

JDBC程序的编写步骤

 

获取数据库连接

Driver接口实现类

特点:

  • 支持多数据库连接

  • java.sql.Driver接口是所有JDBC驱动程序需要实现的接口

示例代码:

package JDBCConnectionNo1;

import org.testng.annotations.Test;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
import java.util.Properties;

/**
* 数据库连接测试类1
* @since JDK 1.8
* @date 2021/09/23
* @author Lucifer
*/
public class ConnectionTestNo1 {
   @Test
   public void testConnection1() throws SQLException {
       //获取一个Connection对象--->使用Driver
       //声明一个Driver
       Driver driver = new com.mysql.jdbc.Driver(); //实例化的时候用MySQL具体的Driver的实现类--->这是一个对象,这是一个实现类

       //调用Driver的方法获取Connection对象
       String url = "jdbc:mysql://localhost/xxxx"; //URL的格式
       /*
       jdbc主协议
       mysql子协议--->针对什么数据库
       ip地址
       port端口号
       数据库
        */
       Properties info = new Properties(); //properties本身就是键值对形式的,用于封装用户名和密码--->新建properties对象
       info.setProperty("user", "www");
       info.setProperty("password", "654321");

       //调用connect方法获取Connection对象
       Connection conn = driver.connect(url, info); //返回的是Connection接口的实现类的对象

       System.out.println(conn);
  }
}

小结:

  • Driver

  • URL

  • properties

    • user

    • password

按照步骤依次获取

为了增强可抑制性,代码中不应出现第三方的API

示例代码:

    //第二个连接数据库的方式,对方式一的迭代
   /*
   1、面向接口编程的,代码当中尽可能的不要出现任何第三方相关的API
   2、在上一个方式当中看到了com.mysql.jdbc.Driver这个第三方的API,所以要换一种实现方式
   3、使用反射的方式获取第三方的API--->动态获取第三方的驱动
   使下面的程序中不出现第三方API,让程序有更好的移植性
    */
   @Test
   public void testConnection2() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
       //获取Driver的实现类对象--->使用反射来获取
       Class classNo1 =  Class.forName("com.mysql.jdbc.Driver"); //forName后+的是实现类的路径
       //调取newInstance方法--->1、有无参构造器。2、权限要够
       Driver driver = (Driver) classNo1.newInstance(); //接收为Driver对象(强制转型)
       /*
       这样做的目的:
       1、通过反射的方式获取了Driver的实现类对象
       2、增强了可移植性
        */

       //提供要连接的数据库URL
       String url = "jdbc:mysql://localhost/xxxx";
       //提供连接需要的用户名和密码--->Properties的方式
       Properties info = new Properties(); //properties本身就是键值对形式的,用于封装用户名和密码--->新建properties对象
       info.setProperty("user", "www");
       info.setProperty("password", "123456");

       //获取连接
       Connection conn = driver.connect(url, info);

       System.out.println(conn);
  }

小结:

  • 因为com.mysql.jdbc.Driver是第三方API,所以在程序当中一般不暴露在代码里面

  • 使用反射获取Driver驱动类

  • 使用Class类对象下的newInstance方法创建事务

使用DriverManager进行驱动的注册和获取连接对象

示例代码:

    //使用DriverManager(这是一个具体的类)替换Driver
   @Test
   public void testConnection3() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
       /*
       步骤合并成了两步:
       1、注册驱动
       2、获取连接对象
        */
       //获取Driver的实现类对象--->通过反射获取
       Class classNo2 = Class.forName("com.mysql.jdbc.Driver");
       Driver driver = (Driver) classNo2.newInstance();
       //获取连接信息
       String url = "jdbc:mysql://localhost/xxxx";
       String user = "www";
       String password = "654321";

       //注册驱动
       DriverManager.registerDriver(driver);

       //获取连接
       Connection conn = DriverManager.getConnection(url, user, password);

       System.out.println(conn);
  }

小结:

  • DriverManager下提供了获取Connection对象的方法,调用传参可以获取到返回的对象

  • 使用DriverManager对注册驱动、获取连接进行统一管理

优化过程--->在加载Driver驱动类的时候实际上已经帮我们做了一些事情。在Driver源码当中都有体现

    //省略一些步骤
   @Test
   public void testConnection4() throws ClassNotFoundException, SQLException {
       //提供基础清晰
       String url = "jdbc:mysql://localhost/xxxx";
       String user = "www";
       String password = "654321";

       //加载驱动--->mysql的Driver实现类当中实现了注册驱动等操作
       Class.forName("com.mysql.jdbc.Driver");

       //获取连接
       Connection conn = DriverManager.getConnection(url, user, password);

       System.out.println(conn);
  }

导入驱动的时候已经获取到了驱动,所以可以省略注释(仅是mysql)

    //省略一些步骤
   @Test
   public void testConnection4() throws ClassNotFoundException, SQLException {
       //提供基础清晰
       String url = "jdbc:mysql://localhost/xxxx";
       String user = "www";
       String password = "654321";

       //获取连接
       Connection conn = DriverManager.getConnection(url, user, password);

       System.out.println(conn);
  }

将提供的内容写到配置文件当中

    //将提供的信息写到配置文件当中
   @Test
   public void testConnection5() throws IOException, ClassNotFoundException, SQLException {
       //将数据库连接需要的基本信息声明到配置文件当中,通过读取配置文件的方式连接数据库
       /*
       1、读取配置文件中的四个基本信息--->获取到当前类的加载器在加载resources目录下的配置文件--->这样就会默认的生成一个流
       2、创建一个properties对象引用
       3、使用该类下的加载方法加载流文件
       4、通过getProperties方法读取文件当中的内容
        */
       InputStream in = ConnectionTestNo1.class.getClassLoader().getResourceAsStream("JDBC.properties");

       Properties prop = new Properties();
       prop.load(in);

       //读取文件内容设置成变量
       String user = prop.getProperty("USERNAME");
       String password = prop.getProperty("PASSWORD");
       String driverClass = prop.getProperty("DRIVER");
       String url = prop.getProperty("URL");

       //加载驱动
       Class.forName(driverClass);

       //获取连接
       Connection conn = DriverManager.getConnection(url, user, password);

       System.out.println(conn);
  }

配置文件:

DRIVER=com.mysql.jdbc.Driver
URL=jdbc:mysql://localhost/rbac_v2
USERNAME=www
PASSWORD=654321

小结:

获取数据库连接必须要有的四个基本要素:

  • 加载对应数据库的驱动类

  • 要有URL--->数据库的IP地址和数据库名

  • 配置文件

    • username

    • password

通过配置文件和代码分离实现了数据和代码的分离--->解耦

如果不分离的话打包了以后要重新的修改代码才能够更改连接。使用文件的话直接更改文件参数即可。不需要对打包好的程序重新打包

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/15325584.html