总体思路:

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接口 - 映射SQL ARRAY
    • Blob接口 - SQL BLOB映射
    • Clob接口 - SQL CLOB映射
    • Date类 - SQL DATE映射
    • NClob interface - 映射SQL NCLOB
    • Ref接口 - SQL REF映射
    • RowId接口 - 映射SQL ROWID
    • Struct接口 - SQL STRUCT映射
    • SQLXML接口 - 映射SQL XML
    • Time类 - SQL TIME映射
    • Timestamp类 - SQL TIMESTAMP映射
    • 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.sqljavax.sql功能在JDBC 4.3 API中引入

  • 添加了Sharding支持
  • 增强型Connection能够向驾驶员提供一个请求,一个独立的工作单元开始或结束的提示
  • 增强DatabaseMetaData以确定是否支持Sharding
  • 添加方法driversDriverManager以返回当前加载和可用的JDBC驱动程序的Stream
  • 添加了对Statement支持,用于输入文字和简单标识符
  • 澄清了不推荐使用方法的Java SE版本

java.sqljavax.sql功能在JDBC 4.2 API中引入

  • 添加了JDBCType枚举和SQLType接口
  • 支持REF CURSORSCallableStatement
  • DatabaseMetaData方法返回最大逻辑LOB大小以及是否支持Ref游标
  • 添加了对大型更新计数的支持

java.sqljavax.sql功能在JDBC 4.1 API中引入

  • 允许Connection , ResultSetStatement与尝试,与资源语句中使用对象
  • 支持添加到CallableStatementResultSet以指定要通过getObject方法转换为的Java类型
  • DatabaseMetaData返回PseudoColumns的方法以及始终返回生成的键
  • 添加了对Connection支持,以指定数据库模式,中止和超时物理连接。
  • 添加了对其依赖对象关闭时关闭Statement对象的支持
  • 获得父记录器的支持Driver , DataSource , ConnectionPoolDataSourceXADataSource

java.sqljavax.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.sqljavax.sql功能在JDBC 3.0 API中引入

  • 池化语句 - 重用与池化连接相关的语句
  • 保存点 - 允许将事务回滚到指定的保存点
  • ConnectionPoolDataSource定义的ConnectionPoolDataSource - 指定如何合并连接
  • PreparedStatement对象的参数的元数据
  • 能够从自动生成的列中检索值
  • 能够拥有多个ResultSet对象从返回CallableStatement对象在同一时间开
  • 能够按名称和索引标识CallableStatement对象的参数
  • ResultSet可保持性 - 指定在事务结束时游标应保持打开还是关闭的能力
  • 能够检索和更新Ref对象引用的SQL结构化类型实例
  • 能够编程方式更新BLOB , CLOB , ARRAYREF值。
  • 添加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。 以下三个步骤设置了自定义映射:

  1. 在SQL中定义SQL结构类型或DISTINCT类型
  2. 在SQL编程语言中定义SQL UDT将映射到的类。 该类必须实现SQLData接口。
  3. Connection对象的类型映射中创建一个包含两件事的条目:
    • UDT的完全限定SQL名称
    • 实现SQLData接口的类的对象

当这些适用于UDT时,在该UDT上调用方法ResultSet.getObjectCallableStatement.getObject将自动检索它的自定义映射。 此外, PreparedStatement.setObject方法将自动将对象映射回其SQL类型以将其存储在数据源中。

Druid连接池源代码分析之四-java.lang.sql 规范相关推荐

  1. Druid连接池源代码分析之一

    Druid功能简介 Druid是阿里开源的连接池,连接池的主要作用是为了复用,比如一般的数据库建立一个连接需要初始化很多对象,并且再加上tcp的三次握手,四次挥手的协议,所以整体的代价比较高,并且在一 ...

  2. Druid连接池源代码分析之五-编程知识点

    主要来自于:com.alibaba.druid.pool.DruidDataSource 类 1: AtomicLongFieldUpdater的用法 AtomicLongFieldUpdater&l ...

  3. Druid连接池源代码分析之二-获取连接

    整体思路: 1:druid首先是连接池,DruidConnectionHolder[] 是通过对象数组来实现连接池的池子的,然后动态的维护下表,所以就要求并发性需要比较高,不然很容导致下表不准的现象. ...

  4. Druid连接池源代码分析之三-回收连接

    整体思路 1:DruidConnectionHolder[] connections 来表示还未使用连接池的连接的数量.假如程序中想获取一个连接的时候,首先先判断池子里面还是否有连接,假如有会直接获取 ...

  5. Druid连接池源代码分析之五-starter

    详细分析: 待完善.

  6. C3P0连接池使用时报错java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector

    今天学习连接池的时候,导入了c3p0-0.9.5.2.jar,然后进行实例化使用 @Testpublic void test2() throws SQLException {ComboPooledDa ...

  7. Druid连接池 报错:abandon connection原因分析

    问题现象: 使用Druid的数据库连接池,在进行一个查询SQL的时候,抛出了异常: [2017-10-20 01:40:59.269 ERROR com.alibaba.druid.pool.Drui ...

  8. 应用使用Druid连接池经常性断链问题分析

    前段时间有应用使用Druid连接池经常的提示断链报错,整个问题排查分析过程很有意思.这里将Druid连接池.数据库层以及负载均衡层的配置分析下,记录整个问题的分析过程,同时梳理下Druid连接池的配置 ...

  9. Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS

    1.File类 1.1.File类概述和构造方法 File:是文件和目录路径名的抽象表示 文件和路径是可以通过File封装为对象的 以下是三种实现的方法,一般来说,用第一种就可以 public cla ...

最新文章

  1. 数据分析奥斯卡女神们,谁是你心中的No.1?
  2. 亚马逊是如何进行软件开发的
  3. java之Scanner
  4. Unity中对象池的使用
  5. intelliJ idea运行新的test功能时,报错:class not found ..... empty test suite
  6. boost::geometry::partition用法的测试程序
  7. RabbitMQ消息应答
  8. Linux能否靠架构取得胜利
  9. js 随机1-10随机数_寻找随机的错误-一个真实的故事
  10. 前端学习(3168):react-hello-react之...扩展运算符
  11. java 强制清除缓存_IDEA强制清除Maven缓存的方法示例
  12. 自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)
  13. 用python写行列式_用Python开发线性代数算法(一) | 手写行列式算法的实现
  14. php循环的应用案例,php for循环的实例分享
  15. c++卸载工具_IIS修复IIS出现错误后如何完全卸载重装
  16. webview android%3e28,Android WebView 文明踩坑之路
  17. java计算机毕业设计幼儿园管理系统源码+数据库+系统+lw文档+部署
  18. steam计算机共享授权,steam共享游戏账号怎么授权
  19. 【武忠祥高等数学基础课笔记】第一章 函数、极限、连续
  20. 阿里云首席安全研究员吴翰清:我人生的两次选择

热门文章

  1. Win10 右下角电源图标怎么删除
  2. 《姜子牙》的故事没有讲好
  3. 小程序关于请求接口302重定向处理方法
  4. Gallery is deprecated
  5. GIS专业学生的毕业出路,我们该何去何从?
  6. Error: php71w-common conflicts with php-common-5.4.16-46.el7.x86_64
  7. 微信支付 JAVA实现
  8. 【电磁场与电磁波】 第四章 平行平板波导 (Parallel plate waveguide)
  9. 学语言python研究生专业-为什么我建议现在的研究生学点编程?
  10. pos口和GE口介绍