前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDBC设计理念浅析 JDBC简介(一)

JDBC设计理念浅析 JDBC简介(一)

作者头像
noteless
发布2019-02-25 11:46:09
9940
发布2019-02-25 11:46:09
举报
文章被收录于专栏:noteless

概念

JDBC是J2EE的标准规范之一,J2EE就是为了规范JAVA解决企业级应用开发制定的一系列规范,JDBC也不例外。

JDBC是用于Java编程语言和数据库之间的数据库无关连接的标准Java API。

换句话说,使用JAVA语言连接数据库进行操作,就需要使用JDBC API。

统一的JDBC API接口,屏蔽了底层数据库的细节,可以使用一致性的编码(跨数据库)对数据库进行操作。

通过JDBC将JAVA应用于数据库访问连接进行解耦,可以相互独立发展,又能够结合使用。

简言之,JDBC就是对于java编码来说,在应用程序和数据库之间的一个中间层 API

有了中间层JDBC,你就可以面向JDBC API进行编程,不需要关注底层数据库细节。

可以认为JDBC代理了对于数据库的操作与访问,也可以认为JDBC将数据库的访问适配成一致性的访问接口,也可以理解成JDBC是对数据库访问的一层封装

不管怎么理解,他就是那么一套API的存在。

官方文档:

https://www.oracle.com/technetwork/java/javase/jdbc/index.html

Java数据库连接(JDBC) API是Java编程语言和一系列SQL数据库以及其他表格数据源,比如电子表格或文本文件之间的一个数据库连接的行业标准。

JDBC API为基于sql的数据库访问提供了一个调用级API。

JDBC技术允许您使用Java编程语言为需要访问企业数据的应用程序开发“一次编写,到处运行”的功能。

使用启用JDBC技术的驱动程序,您甚至可以在异构环境中连接所有企业数据

更详细的官方文档:

https://www.oracle.com/technetwork/java/overview-141217.html

JDBC功能核心

数据库查询

下图为windows cmd登录MYSQL查询数据的过程,主要是三个步骤:

  • 连接数据库
  • 执行SQL
  • cmd打印结果

JDBC用于JAVA应用程序与数据库的连接访问,是应用程序与数据库的中间层

但是不管怎样,他仍旧是要操作数据库,所以也需要连接和查询

cmd 作为客户端进行查询时,仅仅将信息打印出来就好了,这就是对cmd对数据库结果的处理

JDBC需要为JAVA应用程序服务,需要将结果交付到应用程序中,所以JDBC还需要对返回的数据进行处理。

所以JDBC连接数据库进行查询也是大致三个步骤

  1. 连接数据库
  2. 执行SQL
  3. 处理返回结果

JDBC架构设计

JDBC主要包括两类接口:

  • 提供了一套纯粹的JAVA API给应用程序开发者 
  • 提供了一套低级别的JDBC driver API给数据库驱动开发者

应用程序开发者借助于API用于开发可以访问数据库的程序;

驱动开发者借助于API进而提供服务到JDBC;

提供给数据库驱动开发者的API则正好是为了实现提供给应用程序开发者的这套API,这句话有些令人迷惑

JDBC是对数据库操作访问的薄层封装,应用程序开发者借助于JDBC可以实现对数据库的操作访问,但是,最终提供的服务仍旧是数据库

是具体的数据库实现了具体SQL的执行

所以JDBC提供给应用程序开发者的API就是开发者使用JDBC访问数据库的接口

而提供给数据库驱动开发者的API则恰恰是为了让数据库驱动开发者来提供服务

接口与实现分离,是一种桥接模式的思想(可以参阅本人的桥接模式的文章)

理解了桥接模式就可以很好的理解这种“面向接口”的编程思维,将接口与实现进行分离。

接口提供出来用于应用程序开发者使用,数据库或者工具厂商负责提供实现。

JDBC的接口与实现之间,通过Driver Manager 进行联结

JDBC API从Driver Manager获取服务,Driver Manager用来管理驱动程序,驱动程序可以很方便的注册到管理器中

JDBC API

JDBC基本步骤有三个:连接、执行SQL、处理结果

另外还需要驱动管理器对注册的驱动程序进行管理

既然是代码,必然可能出现异常,所以还需要对相关异常进行处理

为了能够更好地将SQL类型数据映射到应用程序还提供了更丰富的映射

有的时候不仅仅是应用程序对数据库数据集进行检索,可能还需要数据库自身的相关信息(元数据 )

ps:数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。

在JAVA中一切皆为对象,所以这些所有的元素,都被抽象为对象

连接、语句、结果、映射、元数据、异常、驱动管理器

https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/

https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html

官方相关介绍

What the  java.sql Package Contains

The  java.sql package contains API for the following:

  • Making a connection with a database via the  DriverManager facility   通过驱动管理器工具与数据库建立连接
    • DriverManager class 类 -- makes a connection with a driver 与驱动程序建立连接
    • SQLPermission class 类-- provides permission when code running within a Security Manager, such as an applet, attempts to set up a logging stream through the DriverManager在安全管理器(如applet)中运行的代码试图通过驱动程序管理器设置日志流时,提供权限
    • Driver interface 接口 -- provides the API for registering and connecting drivers based on JDBC technology ("JDBC drivers"); generally used only by the DriverManager class提供基于JDBC技术的驱动程序注册和连接API(“JDBC驱动程序”);通常只被DriverManager类使用
    • DriverPropertyInfo class 类 -- provides properties for a JDBC driver; not used by the general user 为JDBC驱动程序提供属性;一般用户不使用
  • Sending SQL statements to a database  向数据库发送SQL语句
    • Statement -- used to send basic SQL statements  执行对象,用于发送基本的SQL语句
    • PreparedStatement -- used to send prepared statements or basic SQL statements (derived from Statement)  用于发送准备好的语句或基本SQL语句(从Statement派生)
    • CallableStatement -- used to call database stored procedures (derived from PreparedStatement )  用于调用数据库存储过程(从PreparedStatement 派生) 
    • Connection interface 接口 -- provides methods for creating statements and managing connections and their properties  提供用于创建语句和管理连接及其属性的方法
    • Savepoint -- provides savepoints in a transaction  在事务中提供Savepoint保存点
  • Retrieving and updating the results of a query   检索和更新查询的结果
    • ResultSet interface 接口
  • Standard mappings for SQL types to classes and interfaces in the Java programming language   SQL类型到Java编程语言中的类和接口的标准映射
    • `Array` interface 接口-- mapping for SQL `ARRAY   SQL ARRAY映射`
    • `Blob` interface 接口-- mapping for SQL `BLOB     SQL BLOB映射`
    • `Clob` interface接口 -- mapping for SQL `CLOB     SQL CLOB 映射`
    • `Date` class 类-- mapping for SQL `DATE`
    • `NClob` interface 接口 -- mapping for SQL `NCLOB`
    • `Ref` interface 接口-- mapping for SQL `REF`
    • `RowId` interface 接口-- mapping for SQL `ROWID`
    • `Struct` interface 接口-- mapping for SQL `STRUCT`
    • `SQLXML` interface 接口-- mapping for SQL `XML`
    • `Time` class 类-- mapping for SQL `TIME`
    • `Timestamp` class 类-- mapping for SQL `TIMESTAMP`
    • `Types` class 类-- provides constants for SQL types        为SQL类型提供常量
  • Custom mapping an SQL user-defined type (UDT) to a class in the Java programming language   自定义将SQL用户定义类型(UDT)映射到Java编程语言中的类
    • `SQLData` interface -- specifies the mapping of a UDT to an instance of this class     指定UDT到该类实例的映射
    • `SQLInput` interface -- provides methods for reading UDT attributes from a stream    提供从流中读取UDT属性的方法
    • `SQLOutput` interface -- provides methods for writing UDT attributes back to a stream     提供将UDT属性写回流的方法
  • Metadata     元数据
    • `DatabaseMetaData` interface -- provides information about the database       提供有关数据库的信息
    • `ResultSetMetaData` interface -- provides information about the columns of a `ResultSet` object      提供有关ResultSet对象的列的信息
    • `ParameterMetaData` interface -- provides information about the parameters to `PreparedStatement` commands    为PreparedStatement命令提供有关参数的信息
  • Exceptions   异常
    • SQLException -- thrown by most methods when there is a problem accessing data and by some methods for other reasons   当访问数据存在问题时大多数方法都会抛出这个异常,还有一些方法是其他原因抛出这个异常。
    • SQLWarning -- thrown to indicate a warning   抛出以表示警告
    • DataTruncation -- thrown to indicate that data may have been truncated  抛出以指示数据可能已被截断
    • BatchUpdateException -- thrown to indicate that not all commands in a batch update executed successfully  抛出以指示批处理更新中并非所有命令都已成功执行
核心

驱动管理器

DriverManager 管理一组JDBC驱动程序的基本服务。

连接

Connection 与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。

执行对象

Statement  用于执行静态 SQL 语句并返回它所生成结果的对象。

结果集

ResultSet 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

一般流程

第一个JDBC示例

准备

以MYSQL为例,需要MYSQL驱动

数据库表、数据准备,本地安装了MYSQL,有数据库sampledb,内有表student,内容如下图

导包

比如在IDEA中,我的操作如下

示例代码

此示例代码只为最基本查询,并不完善

代码语言:javascript
复制
package jdbc.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* 第一个JDBC
* @author noteless
*/
public class FirstJDBC {
public static void main(String[] args) throws Exception {
    //1、注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //数据库连接所需参数
    String user = "root";
    String password = "123456";
    String url = "jdbc:mysql://localhost:3306/sampledb?useUnicode=true&characterEncoding=utf-8";
    //2、获取连接对象
    Connection conn = DriverManager.getConnection(url, user, password);
    //设置sql语句
    String sql = "select * from student";
    //3、获得sql语句执行对象
    Statement stmt = conn.createStatement();
    //4、执行sql并保存结果集
    ResultSet rs = stmt.executeQuery(sql);
    //5、处理结果集
    while (rs.next()) {
        System.out.print("id:" + rs.getInt(1));
        System.out.print(",姓名:" + rs.getString(2));
        System.out.print(",年龄:" + rs.getInt(3));
        System.out.println(",性别:" + rs.getString(4));
    }
    //6、资源关闭
    rs.close();
    stmt.close();
    conn.close();
}
}
结果

总结

JDBC就是JAVA语言开发需要连接数据库的应用程序 ,所需要使用的JAVA API

提供了数据库驱动程序的管理,连接,语句执行,以及结果返回等工作,是应用程序与数据库之间的薄层封装

JDBC的理念遵循依赖倒置原则,面向抽象进行编程,通过桥接模式将抽象与实现继续分离

即保证了应用程序开发者通过JDBC对数据库访问操作的一致性,又可以使得数据库独立发展

通过驱动管理器驱动程序可以方便的注册进来进而通过JDBC提供服务。

JDBC简化了对数据库访问操作的复杂度,屏蔽了应用程序对底层数据库的依赖,将数据库的操作访问过程进行抽象分步,只需要按照既有的模块化流程就可以完成操作。

JDBC的核心内容就是与数据库建立连接,发送SQL语句,处理结果。  

 原文地址:JDBC设计理念浅析 JDBC简介(一)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
  • JDBC功能核心
    • 数据库查询
    • JDBC架构设计
    • JDBC API
      • 官方相关介绍
        • 核心
          • 一般流程
          • 第一个JDBC示例
            • 准备
              • 导包
                • 示例代码
                  • 结果
                  • 总结
                  相关产品与服务
                  云数据库 Redis
                  腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档