总体思路:
1:首先java.lang.sql包下面提供了完整操作数据库的高度抽象接口,假如想实现操作数据库的能力实现这些接口就可以了(其中也包含了连接池),具体接口的能力看下文。
2:我们一直使用的 com.mysql.cj.jdbc 包也是实现了基本的mysql数据库操作的接口,但是仅此而已。能进行数据的增删改查。
3:druid的实现相当于是 mysqljdbc+池化技术+其他的附加能力,实现方式也是通过实现java.lang.sql的接口来进行进一步能力加强。
4:这也是druid原来里面实现了很多java.lang.sql的接口(wrapper等等)
提供使用Java™编程语言访问和处理存储在数据源(通常是关系数据库)中的数据的API。 此API包含一个框架,可以动态安装不同的驱动程序以访问不同的数据源。 尽管JDBC™API主要用于将SQL语句传递给数据库,但它提供了使用表格格式从任何数据源读取和写入数据。 可以通过javax.sql.RowSet
接口组获得读写器设施,以便使用和更新电子表格,平面文件或任何其他表格数据源中的数据。
JDBC [4.3] API包括什么
JDBCâ“4.3 API包括java.sql
包(称为JDBC核心API)和javax.sql
包(称为JDBC Optional Package API)。 这个完整的JDBC API包含在Java®“标准版(JavaSEâ”)版本7中javax.sql
软件包将JDBC API的功能从客户端API扩展到服务器端API,它是一个Java™企业版(Java EE™)技术的重要组成部分。
版本
JDBC 4.3 API包含所有以前的JDBC API版本:
- JDBC 4.2 API
- JDBC 4.1 API
- JDBC 4.0 API
- JDBC 3.0 API
- JDBC 2.1核心API
- JDBC 2.0可选包API
(请注意,JDBC 2.1核心API和JDBC 2.0可选包API一起称为JDBC 2.0 API。) - JDBC 1.2 API
- JDBC 1.0 API
类,接口,方法,字段,构造函数和异常具有以下“since”标记,用于指示何时将它们引入Java平台。 当这些“since”标记用于JDBC API的Javadoc™注释时,它们表示以下内容:
- 从9开始 - JDBC 4.3 API中的新增功能和Java SE平台的第9版
- 从1.8开始 - JDBC 4.2 API中的新增内容和Java SE平台的一部分,版本8
- 从1.7开始 - JDBC 4.1 API中的新增内容和Java SE平台的一部分,版本7
- 从1.6 - JDBC 4.0 API中的新增内容和Java SE平台的一部分,版本6
- 从1.4开始 - JDBC 3.0 API中的新增功能和J2SE平台的1.4版本
- 从1.2开始 - JDBC 2.0 API和J2SE平台的新版本1.2
- 从1.1或没有“自”标签 - 在原始的JDBC 1.0 API和部分JDKâ“¢,版本1.1中
注意:许多新功能是可选的; 因此,驱动程序和它们支持的功能存在一些差异。 在尝试使用之前,请务必检查驱动程序的文档以确定它是否支持该功能。
注意:类SQLPermission
已添加到SQLPermission
SDK,标准版1.3版中。 此类用于防止未经授权访问与DriverManager
关联的日志记录流,该日志流可能包含表名,列数据等信息。
java.sql
包含什么
java.sql
包中包含以下API:
- 通过
DriverManager
工具与数据库建立连接DriverManager
class - 与驱动程序建立连接SQLPermission
class - 在安全管理器(例如applet)中运行的代码尝试通过DriverManager
设置日志记录流时提供DriverManager
Driver
interface - 提供基于JDBC技术注册和连接驱动程序的API(“JDBC驱动程序”); 通常仅由DriverManager
类使用DriverPropertyInfo
class - 提供JDBC驱动程序的属性; 一般用户不使用
- 将SQL语句发送到数据库
Statement
- 用于发送基本SQL语句PreparedStatement
- 用于发送PreparedStatement
准备语句或基本SQL语句(派生自Statement
)CallableStatement
- 用于调用数据库存储过程(派生自PreparedStatement
)Connection
interface - 提供创建语句和管理连接及其属性的方法Savepoint
- 在事务中提供保存点
- 检索和更新查询结果
ResultSet
接口
- SQL类型到Java编程语言中的类和接口的标准映射
Array
接口 - 映射SQLARRAY
Blob
接口 - SQLBLOB
映射Clob
接口 - SQLCLOB
映射Date
类 - SQLDATE
映射NClob
interface - 映射SQLNCLOB
Ref
接口 - SQLREF
映射RowId
接口 - 映射SQLROWID
Struct
接口 - SQLSTRUCT
映射SQLXML
接口 - 映射SQLXML
Time
类 - SQLTIME
映射Timestamp
类 - SQLTIMESTAMP
映射Types
class - 为SQL类型提供常量
- 自定义SQL用户定义类型(UDT)到Java编程语言中的类
SQLData
interface - 指定UDT到此类实例的映射SQLInput
interface - 提供从流中读取UDT属性的方法SQLOutput
interface - 提供将UDT属性写回流的方法
- 元数据
DatabaseMetaData
interface - 提供有关数据库的信息ResultSetMetaData
interface - 提供有关ResultSet
对象的列的信息ParameterMetaData
interface - 提供有关PreparedStatement
命令的参数的信息
- 例外
SQLException
- 当访问数据时由大多数方法抛出,并且由于其他原因由某些方法抛出SQLWarning
- 抛出以指示警告DataTruncation
- 抛出以指示数据可能已被截断BatchUpdateException
- 抛出以指示批量更新中的所有命令都未成功执行
java.sql
和javax.sql
功能在JDBC 4.3 API中引入
- 添加了
Sharding
支持 - 增强型
Connection
能够向驾驶员提供一个请求,一个独立的工作单元开始或结束的提示 - 增强
DatabaseMetaData
以确定是否支持Sharding - 添加方法
drivers
到DriverManager
以返回当前加载和可用的JDBC驱动程序的Stream - 添加了对
Statement
支持,用于输入文字和简单标识符 - 澄清了不推荐使用方法的Java SE版本
java.sql
和javax.sql
功能在JDBC 4.2 API中引入
- 添加了
JDBCType
枚举和SQLType
接口 - 支持
REF CURSORS
在CallableStatement
DatabaseMetaData
方法返回最大逻辑LOB大小以及是否支持Ref游标- 添加了对大型更新计数的支持
java.sql
和javax.sql
功能在JDBC 4.1 API中引入
- 允许
Connection
,ResultSet
和Statement
与尝试,与资源语句中使用对象 - 支持添加到
CallableStatement
和ResultSet
以指定要通过getObject
方法转换为的Java类型 DatabaseMetaData
返回PseudoColumns的方法以及始终返回生成的键- 添加了对
Connection
支持,以指定数据库模式,中止和超时物理连接。 - 添加了对其依赖对象关闭时关闭
Statement
对象的支持 - 获得父记录器的支持
Driver
,DataSource
,ConnectionPoolDataSource
和XADataSource
java.sql
和javax.sql
功能在JDBC 4.0 API中引入
- auto java.sql.Driver discovery - 不再需要通过
Class.forName
加载java.sql.Driver
类 - 国家字符集支持增加
- 为SQL:2003 XML数据类型添加了支持
- SQLException增强功能 - 增加了对原因链的支持; 为常见的SQLState类值代码添加了新的SQLExceptions
- 增强的Blob / Clob功能 - 为创建和释放Blob / Clob实例提供的支持以及为改善可访问性而添加的其他方法
- 添加了对访问SQL ROWID的支持
- 添加了支持以允许JDBC应用程序访问由供应商包装的JDBC资源的实例,通常在应用程序服务器或连接池环境中。
- 当被通知可用性
PreparedStatement
,其与相关联的PooledConnection
已被关闭或驱动程序确定是无效
java.sql
和javax.sql
功能在JDBC 3.0 API中引入
- 池化语句 - 重用与池化连接相关的语句
- 保存点 - 允许将事务回滚到指定的保存点
- 为
ConnectionPoolDataSource
定义的ConnectionPoolDataSource
- 指定如何合并连接 PreparedStatement
对象的参数的元数据- 能够从自动生成的列中检索值
- 能够拥有多个
ResultSet
对象从返回CallableStatement
对象在同一时间开 - 能够按名称和索引标识
CallableStatement
对象的参数 ResultSet
可保持性 - 指定在事务结束时游标应保持打开还是关闭的能力- 能够检索和更新
Ref
对象引用的SQL结构化类型实例 - 能够编程方式更新
BLOB
,CLOB
,ARRAY
和REF
值。 - 添加
java.sql.Types.DATALINK
数据类型 - 允许JDBC驱动程序访问存储在数据源外部的对象 - 添加用于检索SQL类型层次结构的元数据
java.sql
功能在JDBC 2.1 Core API中引入
- 可滚动结果集 - 使用
ResultSet
接口中的新方法,允许将光标移动到特定行或相对于其当前位置的位置 - 批量更新
- 程序化更新 - 使用
ResultSet
更新程序方法 - 新数据类型 - 映射SQL3数据类型的接口
- 用户定义类型(UDT)的自定义映射
- 其他功能,包括性能提示,字符流的使用,
java.math.BigDecimal
值的完全精度,附加安全性以及对日期,时间和时间戳值的时区支持。
javax.sql
功能在JDBC 2.0 Optional Package API中引入
DataSource
接口作为连接的一种手段。 Java命名和目录接口(JNDI)用于向命名服务注册DataSource
对象,也用于检索它。- 池连接 - 允许使用和重用连接
- 分布式事务 - 允许事务跨越不同的DBMS服务器
RowSet
技术 - 提供处理和传递数据的便捷方法
UDT的自定义映射
SQL中定义的用户定义类型(UDT)可以映射到Java编程语言中的类。 SQL结构类型或SQL DISTINCT
类型是可以自定义映射的UDT。 以下三个步骤设置了自定义映射:
- 在SQL中定义SQL结构类型或
DISTINCT
类型 - 在SQL编程语言中定义SQL UDT将映射到的类。 该类必须实现
SQLData
接口。 - 在
Connection
对象的类型映射中创建一个包含两件事的条目:- UDT的完全限定SQL名称
- 实现
SQLData
接口的类的类
对象
当这些适用于UDT时,在该UDT上调用方法ResultSet.getObject
或CallableStatement.getObject
将自动检索它的自定义映射。 此外, PreparedStatement.setObject
方法将自动将对象映射回其SQL类型以将其存储在数据源中。