• 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!!!
  • 相关阅读:
    Send EMail from your .NET Application using your GMail Account
    ObjectContext 是开发人员在查询、添加和删除其实体实例以及将新状态保存回数据库时用到的主要构造
    AjaxPro使用说明
    .NET Framework 类库
    sysobjects syscolumns和SysTypes笔记
    javascript 懒加载技术(lazyload)简单实现
    WEB前端开发笔试题2
    css方框模型(盒模型Box Model)
    让IE支持CSS3选择器的方法(利用JS)
    让IE6/IE7/IE8浏览器支持CSS3属性
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15325584.html
Copyright © 2020-2023  润新知