01. jdbc 简介

it2022-05-05  137

jdbc 系列文章列表, 请查看目录: 《jdbc学习笔记》

1. jdbc 简介

jdbc(Java Database Connectivity) 是一个独立于特定数据库管理系统, 通用的sql数据库存取和操作的共用接口, 定义了用来访问数据库的标准java类库. jdbc 为访问不同的数据库,提供了一种统一的API.

1.1 jdbc API

jdbc API(接口)包括两个层次:

面向应用的API: Java API(接口), 供java 应用程序开发使用.面向数据库的API: Java Driver API, 供开发商开发数据库驱动程序使用.

1.2 jdbc 驱动

jdbc 只定义了java对数据库操作的接口, 具体实现由各数据库厂商提供实现. 各数据库厂商依据jdbc规范制作的jdbc实现类的类库, 称之为jdbc 驱动. jdbc 驱动程序共有四种类型:

JDBC网路协议的纯Java驱动程序: 使用最多的类型JDBC-ODBC 桥部分本地API,部分Java的驱动程序本地协议的纯java驱动程序

1.3 jdbc URL

jdbc url 用于指定驱动程序类型和要连接的数据库信息. 驱动程序管理器(DriverManager) 通过此url 选择正确的驱动程序, 与指定的数据库建立连接.URL 格式: <协议>:<子协议>:<子名称> 协议: 始终为jdbc子协议: 用于标识一个数据库驱动程序子名称: 标识具体数据库. 可根据不同的子协议而变化, 目的是为了给定位数据库提供足够多的信息. # mysql jdbc url jdbc:mysql://localhost:3306/learn-jdbc?characterEncoding=UTF-8 # oracle jdbc url jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))

2. jdbc 常用API

所谓jdbc 只提供API, 指的是在jdk源码(java.sql.*)中定义了jdbc 操作的相关接口, 可直接利用接口进行开发. 理想情况下, 应用使用什么数据库存储数据, 只需要替换相应的数据库驱动即可.因为不同数据库的sql略有不同, 因此是理想情况下.java.sql 包下提供了很多接口, 笔者这里介绍几个比较常用的接口.需要注意的是, Connection, Statement, ResultSet 均为数据库连接资源, 虽然继承了AutoCloseable接口, 但是依然建议手动关闭资源.

2.1 Driver

接口: java.sql.DriverDirver 接口是所有JDBC 驱动程序必须实现的接口, 由数据库厂商实现, 这个接口用于向应用程序注册该驱动程序.通常不建议通过直接创建Driver 实例, 建立与数据库的连接. 因为这样会导致程序与数据库强耦合.

2.2 DriverManager

驱动管理器: java.sql.DriverManagerDriverManager 用于管理数据库驱动, 根据不同jdbc URL 获取相应数据库的连接.通过DriverManager 获取数据库连接有两个好处: 应用程序可注册多种数据库驱动程序, DriverManager可根据jdbc URL 类型返回相应数据库的连接应用程序与驱动实现解耦, 因为程序代码中无须直接编写Driver 实现类的代码.

2.3 Connection

数据库连接: java.sql.ConnectionConnection 是jdbc 与数据库搭建的数据传输桥梁, 可用于获取数据操作对象Statement, 设置事务隔离级别, 控制事务提交与回滚等操作.

2.4 Statment

Statment 用于执行sql, jdbc 定义了三种Statment接口:

java.sql.Statement: 接口. 可用于执行增删改查等操作, 但有sql注入风险. java.sql.PreparedStatement: 接口, 继承于Statement. 用于参数化执行sql, 最常用的一种方式. java.sql.CallableStatement: 接口, 继承于 PreparedStatement. 用于调用数据库的存储过程或函数.

2.5 ResultSet

结果集: java.sql.ResultSetResultSet 是jdbc定义的一个查询结果集, 类似于一个二维表结构. 但是遍历时, 需要采用游标的方式进行遍历, 默认游标在表头, 需要使用next()方法判断并移动游标.

2.6 ResultSetMetaData

结果集信息: java.sql.ResultSetMetaDataResultSetMetaData 用于存储结果集中各列信息, 包含类名称, 列别名, 列的数据库类型, 列的jdbc 类型, 列数量等. 可通过ResultSetMetaData 和反射开发结果集封装工具类, 类似于Mybatis 的结果集封装功能.

2.7 DatabaseMetaData

数据库信息:java.sql.DatabaseMetaDataDatabaseMetaData 用于获取数据库和驱动的相关信息, 如数据库类型, 数据库版本, 数据库列表, 表列表, 驱动版本等信息.

最新回复(0)