详解JDBC的概念及获取数据库连接的5种方式

 更新时间:2022年09月19日 10:50:37   作者:夏志121  
Java DataBase Connectivity是将Java与SQL结合且独立于特定的数据库系统的应用程序编程接口,一种可用于执行SQL语句的JavaAPI。本文主要介绍了JDBC的概念及获取数据库连接的5种方式,需要的可以参考一下

一、JDBC概念

Java DataBase Connectivity(Java数据库连接技术) 它是将Java与SQL结合且独立于特定的数据库系统的应用程序编程接口(API-它是一种可用于执行SQL语句的JavaAPI,即由一组用Java语言编写的类与接口所组成)

JDBC的设计目的:

它是一种规范,设计出来的主要目的是为了让各个数据库开发商为Java程序员提供标准的数据访问类和接口,使得独立于DBMS的Java应用程序的开发成为可能(数据库改变,驱动程序跟着改变,但是应用程序不变) Java设计规范接口,各大数据库产商遵守规范实现,Java程序员不需要考虑实现细节,只需要调用API即可

JDBC工作的基本流程:

一个基本的JDBC工作流程,分为以下几步:

1、加载特定数据库驱动器实现类,并注册驱动器(Driver会注册到DriverManager中)

2、根据特定的URL,返回可以接受此URL的数据库驱动对象Driver

3、使用数据库驱动 Driver 创建数据库连接Connection会话

4、使用 Connection对象创建 用于操作sql的Statement对象

5、statement对象 .执行 sql语句,返回结果ResultSet 对象

6、处理ResultSet中的结果

7、关闭连接,释放资源

二、JDBC获取数据库连接的5种方式

方式一

public class ConnectionTest {
    @Test
    public void testConnection1() throws SQLException {
        //获取Driver实现类对象
        Driver driver = new com.mysql.jdbc.Driver();
        //jdbc:mysql: 协议
        //localhost ip地址
        //3306 MySQL数据库默认端口号
        //test 需要连接的数据库名称
        String url = "jdbc:mysql://localhost:3306/test";
        Properties info = new Properties();
        //设置连接的用户名和名称,user和password是固定的写法
        info.setProperty("user","root");
        info.setProperty("passwor","root");
 
        Connection connect = driver.connect(url, info);
 
        System.out.println(connect);
    }
}

方式二

public class ConnectionTest {
    @Test
    public void testConnection2() throws Exception {
        //1.使用反射获取Driver实现类对象
        Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clazz.newInstance();
        //2.提供需要连接的数据库
        String url = "jdbc:mysql://localhost:3306/test";
        //3.提供连接需要的用户和密码
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","lxq");
        //获取链接
        Connection connect = driver.connect(url, info);
 
        System.out.println(connect);
    }
}

方式二是方式一的迭代,与方式一相比没有出现第三方的API,有较好的移植性

方式三

public class ConnectionTest {
    @Test
    public void testConnection3() throws Exception {
        //1.使用反射获取Driver实现类对象
        Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clazz.newInstance();
 
        //2.提供需要连接的数据库
        String url = "jdbc:mysql://localhost:3306/test";
        //3.提供连接需要的用户和密码
        String user = "root";
        String passwor = "root";
        //4.注册驱动
        DriverManager.registerDriver(driver);
        //5.获取连接
        Connection connection = DriverManager.getConnection(url, user, passwor);
 
        System.out.println(connection);
    }
}

使用DriverManager(驱动管理器)替换Driver,DriverManager是jdk提供的一个类,用来完成获取连接的操作

方式四

public class ConnectionTest {
    @Test
    public void testConnection4() throws Exception {
        //1.提供连接所需信息
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String passwor = "root";
        //2.使用反射加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //3.获取连接
        Connection connection = DriverManager.getConnection(url, user, passwor);
 
        System.out.println(connection);
    }
}

与方式三相比,方式四省略了如下代码:

Driver driver = (Driver) clazz.newInstance();
DriverManager.registerDriver(driver);

理由是,在com.mysql.jdbc.Driver类中有如下所示的静态代码块,使用Class.forName()加载这个驱动时就会执行这个静态代码块,实现了注册驱动

static {
    try {
        DriverManager.registerDriver(new Driver());
    } catch (SQLException var1) {
        throw new RuntimeException("Can't register driver!");
    }
}

方式五

public class ConnectionTest {
    @Test
    public void testConnection5() throws Exception {
        //1.获取连接所需信息
        InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
 
        Properties info = new Properties();
        info.load(is);
        String url = info.getProperty("url");
        String user = info.getProperty("user");
        String password = info.getProperty("passwor");
        String driverClass = info.getProperty("driverClass");
        //2.使用反射加载驱动
        Class.forName(driverClass);
        //5.获取连接
        Connection connection = DriverManager.getConnection(url, user, passwor);
 
        System.out.println(connection);
    }
}

其中配置文件jdbc.properties在src目录下:

url=jdbc:mysql://localhost:3306/test
user=root
passwor=root;
driverClass=com.mysql.jdbc.Driver

使用配置文件的好处:

1、实现代码和数据的分离,如果需要修改配置信息,直接在配置文件中进行修改,不需要深入代码

2、如果修改配置信息,省去了重新编译的过程=

到此这篇关于详解JDBC的概念及获取数据库连接的5种方式的文章就介绍到这了,更多相关JDBC数据库连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis框架的xml映射文件常用查询指南

    mybatis框架的xml映射文件常用查询指南

    这篇文章主要给大家介绍了关于mybatis框架的xml映射文件常用查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java中的Optional使用详细说明

    Java中的Optional使用详细说明

    这篇文章主要介绍了Java中的Optional使用详细说明,Optional就是相当于把对象包了一层,将判断空的部分代码给单独抽出来了,主要就是为了避免null引起的部分问题,需要的朋友可以参考下
    2023-11-11
  • httpclient evict操作源码解读

    httpclient evict操作源码解读

    这篇文章主要为大家介绍了httpclient evict操作源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • SpringCloud中的Eureka注册中心详细解读

    SpringCloud中的Eureka注册中心详细解读

    这篇文章主要介绍了SpringCloud中的Eureka注册中心详细解读,想要参与服务注册发现的实例首先需要向Eureka服务器注册信息,注册在第一次心跳发生时提交,需要的朋友可以参考下
    2023-11-11
  • Java基于反射机制实现全部注解获取的方法示例

    Java基于反射机制实现全部注解获取的方法示例

    这篇文章主要介绍了Java基于反射机制实现全部注解获取的方法,结合实例形式分析了java反射机制获取注解的具体实现方法与操作注意事项,需要的朋友可以参考下
    2019-09-09
  • Spring的事件监听机制示例详解

    Spring的事件监听机制示例详解

    这篇文章主要给大家介绍了关于Spring的事件监听机制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Java web基础学习之开发环境篇(详解)

    Java web基础学习之开发环境篇(详解)

    下面小编就为大家带来一篇Java web基础学习之开发环境篇(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 解决引用slf4j中Logger.info只打印出文字没有数据的问题

    解决引用slf4j中Logger.info只打印出文字没有数据的问题

    这篇文章主要介绍了解决引用slf4j中Logger.info只打印出文字没有数据的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • IntelliJ IDEA 2023.2正式发布新UI和Profiler转正(最新推荐)

    IntelliJ IDEA 2023.2正式发布新UI和Profiler转正(最新推荐)

    北京时间2023年7月26日,IntelliJ IDEA 2023.2正式发布,IntelliJ IDEA 2023.2 引入 AI Assistant(AI助手),通过一组由 AI 提供支持的功能助力开发,今天给大家分享IntelliJ IDEA 2023.2正式发布新UI和Profiler转正,感兴趣的朋友一起看看吧
    2023-10-10
  • 如何将jdk10降版本到jdk1.8

    如何将jdk10降版本到jdk1.8

    这篇文章主要介绍了如何将jdk10降版本到jdk1.8问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论