详解Java中与数据库相关的包和类

标签: Java, 数据库

保留所有版权,请引用而不是转载本文(原文地址 https://yeecode.top/blog/59/ )。

很多时候,用Java编写的程序都需要和数据库打交道,这需要我们对Java中与数据库相关的包和类比较了解。

当然,目前很多ORM框架,例如MyBatis等,都会对数据库操作进行进一步的封装,但即使这样,在异常发生时,也会打印出和这些类相关的提示信息。因此无论何种使用场景,了解这些包和类都是十分必要的。本文也主要参考了《通用源码阅读指导书——MyBatis源码详解》一书,这是一本以MyBatis的源码为实例讲述源码阅读方法的书籍,并且附带有示例项目源码,MyBatis的全中文注解。

通用源码阅读指导书-京东自营

《通用源码阅读指导书》

接下来,我们开始介绍,将先介绍Java提供的两个数据库操作包,然后介绍几个主要的类。

1 java.sql包和javax.sql

Java提供的与数据库操作相关的包主要有两个,它们是java.sql包和javax.sql包。

java.sqljavax.sql共同为JAVA提供了强大的JDBC能力。我们接下来会介绍几个MyBatis中常接触到的类,它们都由java.sqljavax.sql提供。

1.1 java.sql

java.sql通常被称为JDBC核心API包,它为Java提供了访问数据源中数据的基础功能。基于该包能实现将SQL语句传递给数据库、从数据库中以表格的形式读写数据等功能。

java.sql提供了一个Driver接口作为数据库驱动的接口。如下图所示。

图 17-1 Driver接口相关类的类图

不同种类的数据库厂商只需要根据自身数据库特点开发相应的Driver实现类,并通过DriverManager进行注册即可。这样,基于JDBC便可以连接不同公司不同种类的数据库。

除此之外,java.sql还为数据库连接、SQL语句、结果集等提供了众多的类,例如表示数据库连接的Connection类、表示数据库操作语句的Statement类、表示数据库操作结果的ResultSet类等。

基于java.sql包,Java程序能够完成各种数据库操作。通常完成一次数据库操作的流程如下所示:

  1. 建立DriverManager对象。
  2. 从DriverManager对象中获取Connection对象。
  3. 从Connection对象中获取Statement对象。
  4. 将SQL语句交给Statement对象执行,并获取返回的结果,结果通常放在ResultSet中。

1.2 javax.sql

javax.sql通常被称为JDBC扩展API包,它扩展了JDBC核心API包的功能,提供了对服务器端的支持,是Java企业版的重要部分。

例如,javax.sql提供了DataSource接口,通过它可以获取面向数据源的Connection,与java.sql中直接使用DriverManager建立连接的方式相比更为灵活(实际上,DataSource接口的实现中也是通过DriverManager对象获取的Connection对象)。除此之外,javax.sql还提供了连接池、语句池、分布式事务等方面的诸多特性。

使用了javax.sql包扩展了java.sql包之后,建议使用DataSource来获取Connection,而不是直接使用DriverManager。于是,一条SQL语句的执行过程如下:

  1. 建立DataSource对象。
  2. 从DataSource对象中获取Connection对象。
  3. 从Connection对象中获取Statement对象。
  4. 将SQL语句交给Statement对象执行,并获取返回的结果,结果通常放在ResultSet中。

2 DriverManager

DriverManager接口位于java.sql,它是JDBC驱动程序管理器,可以管理一组JDBC驱动程序。

DriverManager有一个重要的功能是能够给出一个面向数据库的连接对象Connection对象,该功能是由DriverManager中的getConnection方法提供的。

当调用getConnection方法时,DriverManager会尝试已经加载的驱动程序中找出合适的一个,并用找出的驱动程序建立一个面向指定数据库的连接,最后将建立的连接返回。

DriverManager中主要有下面几个方法。这些方法都是静态方法,不需要建立DriverManager对象便可以直接调用。

3 DataSource

DataSource是javax.sql的一个接口。故名思议,它代表了一个实际的数据源,它的功能是作为工厂提供数据库连接。

DataSource接口中只有两个接口方法,都用来获取一个Connection对象:

javax.sql中的DataSource仅仅是一个接口,不同的数据库可以为其提供多种实现。常见的实现有以下几种:

正因为DataSource接口可以有多种实现,与直接使用DriverManager获得连接对象Connection的方式相比更为灵活。在日常的开发过程中,建议采取使用DataSource来获取数据库连接。

而实际上在DataSource的具体实现中,最终也是基于DriverManager获得的Connection,因此DataSource只是DriverManager的进一步封装。

4 Connection

Connection接口位于java.sql中,它代表对某个数据库的连接。基于这个连接,可以完成SQL语句的执行和结果的获取等工作。

Connection中常用的方法如下:

上述方法主要是用来完成获取Statement对象、设置Connection属性等功能。

同时,Connection中存在事务管理的方法,如commitrollback等。通过调用这些事务管理方法可以控制数据库完成相应的事务操作。

5 Statement

Statement接口位于java.sql中,该接口中定义的一些抽象方法能用来执行静态SQL语句并返回结果。通常Statement对象会返回一个结果集对象ResultSet。

Statement接口中的主要方法有:

上述方法主要是用来完成执行SQL语句、获取SQL语句执行结果等功能。

6 总结

到这里,我们已经对Java中与数据库相关的包和类进行了介绍,并介绍了Java程序与数据库建立连接的流程。MyBatis作为一个出色的ORM框架,基于以上包和类封装了相关的数据库操作流程,并在此基础上完成记录和对象的转换等操作。要想了解以上包和类的使用,大家可以参考《通用源码阅读指导书——MyBatis源码详解》。

通用源码阅读指导书-京东自营

《通用源码阅读指导书》

可以访问个人知乎阅读更多文章:易哥(https://www.zhihu.com/people/yeecode),欢迎关注。

作者书籍推荐