zoukankan      html  css  js  c++  java
  • 【Java】JDBC Part1 数据库连接的演变

    环境搭建

    使用Maven工程的依赖项,如果普通工程就点注释的地址下载jar包即可

    <dependencies>
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.19</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/junit/junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13</version>
                <scope>test</scope>
            </dependency>
    </dependencies>

    原始JDBC链接

        @Test
        public void connectionTest1() throws SQLException {
            // 获取驱动对象
            // 这是8+版本的驱动,5+版本的驱动是这样的com.mysql.jdbc.Driver
            Driver driver = new com.mysql.cj.jdbc.Driver();
    
            // 注入连接信息 这也是8+的链接方式,必须声明时区,5+版本 jdbc:mysql://localhost:3306/mysql
            String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai";
            
            // 协议 jdbc:mysql:
            // 地址 localhost:
            // MySQL端口号 3306
            // 数据库 mysql
            // 参数 serverTimezone=Asia/Shanghai"
    
            // 配置对象封装账户信息
            Properties properties = new Properties();
            properties.setProperty("user","root");
            properties.setProperty("password","123456");
    
            // 注入信息,得到链接
            Connection connection = driver.connect(url,properties);
    
            //com.mysql.cj.jdbc.ConnectionImpl@1d548a08
            System.out.println(connection);
        }

    演变1 利用反射调取实现类创建驱动实例

        @Test // 提升可移植性,面向接口编程,不要出现第三方的API
        public void connectionTest2() throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException {
            //使用反射动态,获取Driver实现类对象
            Class<?> driverClass = Class.forName("com.mysql.cj.jdbc.Driver");
            Driver driver = (Driver) driverClass.newInstance();
            
            String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai";
            
            Properties properties = new Properties();
            properties.setProperty("user","root");
            properties.setProperty("password","123456");
            
            Connection connection = driver.connect(url,properties);
            
            System.out.println(connection);
        }

    演变2 利用驱动管理者实现

        @Test // 用驱动管理者代替驱动对象
        public void connectionTest3() throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException {
    
            Class<?> driverClass = Class.forName("com.mysql.cj.jdbc.Driver");
            Driver driver = (Driver) driverClass.newInstance();
    
            // 驱动注册
            java.sql.DriverManager.registerDriver(driver);
    
            String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai";
            String user = "root";
            String password = "123456";
    
            // 用驱动管理者配置链接信息去获取连接对象
            Connection connection = DriverManager.getConnection(url, user, password);
    
            System.out.println(connection);
        }

    演变3 驱动优化

        @Test // 驱动再优化
        public void connectionTest4() throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException {
            // 注册驱动已经不需要我们来编写了
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai";
            String user = "root";
            String password = "123456";
            // 用驱动管理者配置链接信息去获取连接对象
            Connection connection = DriverManager.getConnection(url, user, password);
            System.out.println(connection);
        }

    演变4 驱动完全不需要写了 jdbc5+版本支持此写法

        @Test // 驱动再再优化 在5+版本已经不需要驱动这玩意儿了
        public void connectionTest4() throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException {
            String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai";
            String user = "root";
            String password = "123456";
            // 用驱动管理者配置链接信息去获取连接对象
            Connection connection = DriverManager.getConnection(url, user, password);
            System.out.println(connection);
        }

    演示5 配置信息不再使用硬编码的方式注入

    配置可随意更改,实现了数据和代码的解耦

        @Test //
        public void connectionTest5() throws SQLException, ClassNotFoundException, IOException {
            InputStream inputStream = ConnectorTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
    
            Properties properties = new Properties();
            properties.load(inputStream);
            
            String driverClass = properties.getProperty("driverClass");
            String url = properties.getProperty("url");
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
    
            //加载驱动
            Class.forName(driverClass);
            Connection connection = DriverManager.getConnection(url, user, password);
            System.out.println(connection);
        }

    在Maven工程,配置文件放在sources里面

    在生成打包文件时,自动生成对应的配置文件

    非Maven的普通项目可采用下面这两种方式读取配置文件

        @Test 
        public void connectionTest6() throws SQLException, ClassNotFoundException, IOException {
            // 返回URL的编码 %20  类加载器读取 文件的位置默认是在当前Module或者项目的src包下
            String path = Loader.class.getClassLoader().getResource("jdbc.properties").getFile();
            // 需要解码
            String decode = URLDecoder.decode(path, "UTF-8");
            System.out.println(path);
            System.out.println(decode);
            Properties properties = new Properties();
            properties.load(new FileInputStream(decode));
    
            String driverClass = properties.getProperty("driverClass");
            String url = properties.getProperty("url");
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
    
            //加载驱动
            Class.forName(driverClass);
            Connection connection = DriverManager.getConnection(url, user, password);
            System.out.println(connection);
        }
    
        @Test //
        public void connectionTest7() throws SQLException, ClassNotFoundException, IOException {
           
            Properties properties = new Properties();
            properties.load(new FileInputStream("src\\jdbc.properties"));
    
            String driverClass = properties.getProperty("driverClass");
            String url = properties.getProperty("url");
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
    
            //加载驱动
            Class.forName(driverClass);
            Connection connection = DriverManager.getConnection(url, user, password);
            System.out.println(connection);
        }
  • 相关阅读:
    ASIX配置vlan tag能被wireshark获取
    翻译-cmake教程
    Manjaro打造开发环境
    Frida入门
    安卓应用启动底层执行逻辑
    集合框架
    oracle清除日志内存
    flutter widgets目录
    给设备添加udid
    5.class
  • 原文地址:https://www.cnblogs.com/mindzone/p/12762480.html
Copyright © 2011-2022 走看看