• 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!!!
  • 相关阅读:
    IntelliJ IDEA 修改内存大小,使得idea运行更流畅。(转发)
    QueryRunner使用总结
    C#中static修饰符的作用
    Design Support库中的控件
    关于tomcat部署项目的问题
    让后台服务一直运行
    活动和服务的通信
    服务的用法
    数组右移问题
    素数对猜想
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15325584.html
Copyright © 2020-2023  润新知