栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【JDBC - 核心技术】02 获取数据库连接

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JDBC - 核心技术】02 获取数据库连接


第02章 获取数据库连接

创作日期:2021-12-06


2.1 要素一:Driver接口实现类 2.1.1 Driver接口介绍
  • java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。
  • 在程序中不需要直接去访问实现了 Driver 接口的类,而是有驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。
    • Oracle的驱动:oracle.jdbc.driver.OracleDriver
    • mySql的驱动:com.mysql.jdbc.Driver
2.1.2 加载与注册JDBC驱动
  • 加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的JDBC 驱动的类名
    • Class.forName("com.mysql.jdbc.Driver");
  • 注册驱动:DriverManager 类是驱动程序管理类,负责管理驱动程序
    • 使用DriverManager .registerDriver(com.mysql.jdbc.Driver)来注册驱动
    • 通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver()方法来注册自身的一个实例。

2.2 要素二:URL
  • JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
  • JDBC URL的标准由三部分组成,各部分间用冒号分隔。
    • ​​​​​​​jdbc:子协议:子名称
    • 协议:JDBC URL中的协议总是jdbc
    • 子协议:子协议用于标识一个数据库驱动程序
    • 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务器端的ip地址),端口号,数据库名 ,如下图:

  • 几种常用数据库的 JDBC URL

    • MySQL的连接URL编写方式:

      • jdbc:mysql://主机名称:mysql服务器端口号/数据库名称?参数=值&参数=值

      • jdbc:mysql://localhost:3306/atguigu

      • jdbc:mysql://localhost:3306/atguigu?useUnicode=true&characterEncoding=utf8​​​​​​​(如果JDBC程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)

      • jdbc:mysql://localhost:3306/atguigu?user=root&password=123456

    • Oracle的连接URL编写方式:

      • ​​​​​​​jdbc:oracle:thin:@主机名称:oracle服务器端口号:数据库名称

      • jdbc:oracle:thin:localhost:1521:atguigu

    • SQLServer的连接URL编写方式:

      • ​​​​​​​jdbc:sqlserver://主机名称:sqlserver服务器端口号:DatabaseName=数据库名称

      • jdbc:mysql://localhost:1433:DatabaseName=atguigu


2.3 要素三:用户名和密码
  • user,password可以用“属性名=属性值”方式告诉数据库
  • 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接

2.4 数据库连接方式举例 2.4.1 连接方式一
public class ConnectionTest1 {

    //方式一
    @Test
    public void testConnection1() throws SQLException {

        //1.获取Driver的实现类对象
        Driver driver = new com.mysql.jdbc.Driver();

        //2.提供要连接的数据库
        //jdbc:mysql:协议 localhost:ip地址 3306:默认mysql的端口号 test:test数据库
        String url = "jdbc:mysql://localhost:3306/data_test";  
        

        //3.提供连接需要的用户名及密码
        //将用户名和密码封装在 properties 当中
        Properties properties = new Properties();
        properties.setProperty("user","root");
        properties.setProperty("password","123456");

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

2.4.2 连接方式二
public class ConnectionTest2 {

    //方式二:对方式一进行的迭代,如下的程序不出现第三方的API,使得程序具有更好的可移植性
    @Test
    public void testConnection2() throws Exception {

        //1.获取Driver的实现类对象:使用反射
        Class aClass = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();

        //2.提供要连接的数据库
        //jdbc:mysql:协议 localhost:ip地址 3306:默认mysql的端口号 test:test数据库
        String url = "jdbc:mysql://localhost:3306/data_test";  

        //3.提供连接需要的用户名及密码
        //将用户名和密码封装在 properties 当中
        Properties properties = new Properties();
        properties.setProperty("user","root");
        properties.setProperty("password","123456");

        //4.获取连接
        Connection connect = driver.connect(url, properties);
        System.out.println(connect);
    }
}
2.4.3 连接方式三
public class ConnectionTest3 {

    //方式三:使用 DriverManager 替换Driver
    @Test
    public void testConnection3() throws Exception {

        //1.获取Driver的实现类对象:使用反射
        Class aClass = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();

        //2.提供要连接的数据库,账户名和密码
        //jdbc:mysql:协议 localhost:ip地址 3306:默认mysql的端口号 test:test数据库
        String url = "jdbc:mysql://localhost:3306/data_test";  
        String user = "root";
        String password = "123456";

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

        //4.获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }
}
2.4.5 连接方式四
public class ConnectionTest4 {

    //方式四:使用 DriverManager 替换Driver
    @Test
    public void testConnection4() throws Exception {
        //1.提供要连接的数据库,账户名和密码
        //jdbc:mysql:协议 localhost:ip地址 3306:默认mysql的端口号 test:test数据库
        String url = "jdbc:mysql://localhost:3306/data_test";  
        String user = "root";
        String password = "123456";

        //2.加载驱动
        Class.forName("com.mysql.jdbc.Driver");

        //3.获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }
}
2.4.4 连接方式五(最终版)
public class ConnectionTest5 {

    //方式四:通过读取配置文件的方式获取连接,实现了数据与代码的分离,实现了解耦
    @Test
    public void testConnection5() throws Exception {
        //1.读取配置文件
        InputStream inputStream = ConnectionTest5.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(inputStream);

        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driverClass = properties.getProperty("driverClass");

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

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

上一节:

下一节:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号