JDBC是什么,JDBC简介(新手必看)
JDBC 的全称是 Java 数据库连接(Java Database Connectivity),它是由一组 Java 类组成的用于执行 SQL 语句的 Java API,可以为关系型数据库提供一个统一的访问接口。
在 Java 程序中,由 JDBC 与具体的数据库驱动程序联系,程序员不必与底层的数据库直接进行交互,也就是说不再需要为每一种数据库专门写一个应用程序,从而增加代码的通用性。
Java 应用程序使用 JDBC 访问数据库的层次结构如下图所示:

图 1 JDBC 访问数据库的层次结构
1) 应用程序(Application)
应用程序是指由开发人员编写的访问数据库的 Java 应用程序,这些程序可以利用 JDBC 完成对数据库的访问和操作。完成的主要任务包括请求与数据库建立连接、向数据库发送 SQL 请求、为结果集定义存储应用和数据类型、查询结果的处理及关闭数据库等操作。
2) JDBC
JDBC 能够动态地管理和维护数据库查询所需要的驱动程序对象,实现 Java 程序与特定驱动程序的连接,从而体现 JDBC 与平台无关的特性。它的主要任务包括为特定的数据库选择驱动程序、处理 JDBC 初始化调用、为每个驱动程序提供 JDBC 功能的入口、为 JDBC 调用执行参数等。
3) 数据库驱动程序(Database Driver)
JDBC 是独立于 DBMS 的,而每个数据库系统都有自己的协议与客户端通信,所以 JDBC 利用数据库驱动程序来使用这些数据库引擎。因此使用不同的 DBMS,需要的驱动程序也不相同,驱动程序一般由数据库厂商或者第三方提供。
4) 数据库(Database)
Java 应用程序所需的数据库及其数据库管理系统。
JDBC API 主要由 java.sql 包提供,该包定义了一系列访问数据库的接口和类。下面对该包内常用的 API 进行简单介绍。
需要注意的是,在编写 JDBC 程序时,需要把所使用的数据库驱动程序加载到项目中。
该接口常用的方法如下表所示:
该接口的常用方法如下表所示:
PreparedStatement 对象可以代表一个预编译的 SQL 语句。由于 PreparedStatement 会将传入的 SQL 命令编译并暂存在内存中,所以当某一 SQL 语句在程序中被多次执行时,使用 PreparedStatement 对象的执行速度要快于 Statement 对象。
如果数据库不支持预编译,那么系统将在 SQL 语句执行时传给数据库,其效果类似于 Statement 对象。与 Statement 相比,PreparedStatement 增加了在执行 SQL 语句调用之前,将输入参数绑定到 SQL 语句调用中的功能。当需要在同一个数据库表中完成一组记录的更新时,使用 PreparedStatement 是一个很好的选择。
该接口的常用方法如下表所示:
ResultSet 接口提供的 getXxx() 方法可以根据列的索引编号或列的名称检索对应列的值,其中以列的索引编号较为高效,编号从 1 开始。其中,Xxx 代表 JDBC 中的 Java 数据类型。
该接口的常用方法如下表所示:
在 Java 程序中,由 JDBC 与具体的数据库驱动程序联系,程序员不必与底层的数据库直接进行交互,也就是说不再需要为每一种数据库专门写一个应用程序,从而增加代码的通用性。
Java 应用程序使用 JDBC 访问数据库的层次结构如下图所示:

图 1 JDBC 访问数据库的层次结构
1) 应用程序(Application)
应用程序是指由开发人员编写的访问数据库的 Java 应用程序,这些程序可以利用 JDBC 完成对数据库的访问和操作。完成的主要任务包括请求与数据库建立连接、向数据库发送 SQL 请求、为结果集定义存储应用和数据类型、查询结果的处理及关闭数据库等操作。
2) JDBC
JDBC 能够动态地管理和维护数据库查询所需要的驱动程序对象,实现 Java 程序与特定驱动程序的连接,从而体现 JDBC 与平台无关的特性。它的主要任务包括为特定的数据库选择驱动程序、处理 JDBC 初始化调用、为每个驱动程序提供 JDBC 功能的入口、为 JDBC 调用执行参数等。
3) 数据库驱动程序(Database Driver)
JDBC 是独立于 DBMS 的,而每个数据库系统都有自己的协议与客户端通信,所以 JDBC 利用数据库驱动程序来使用这些数据库引擎。因此使用不同的 DBMS,需要的驱动程序也不相同,驱动程序一般由数据库厂商或者第三方提供。
4) 数据库(Database)
Java 应用程序所需的数据库及其数据库管理系统。
JDBC常用API
在开发 JDBC 应用程序之前,先了解一下 JDBC 常用的 API。JDBC API 主要由 java.sql 包提供,该包定义了一系列访问数据库的接口和类。下面对该包内常用的 API 进行简单介绍。
1) Driver接口
Driver 是所有 JDBC 驱动程序必须实现的接口,该接口是提供给数据库厂商使用的,不同厂商实现该接口的类名是不同的。需要注意的是,在编写 JDBC 程序时,需要把所使用的数据库驱动程序加载到项目中。
2) DriverManager接口
DriverManager 用于加载、管理 JDBC 驱动程序,建立数据库连接。该接口常用的方法如下表所示:
方法 | 功能描述 |
---|---|
registerDriver(Driver driver) | 用于注册参数指定的驱动程序 |
getConnection(String url,String user,String password) | 指定三个入口参数(数据库的URL、用户名、密码),建立与数据库的连接 |
3) Connection接口
Connection 用于处理与特定数据库的连接,在连接上下文中执行 SQL 语句并返回结果。该接口的常用方法如下表所示:
方法 | 功能描述 |
---|---|
createStatement() | 创建一个 Statement 对象 |
prepareStatement() | 创建预处理 PreparedStatement 对象 |
prepareCall(String sql) | 创建一个 CallableStatement 对象来调用数据库存储过程 |
4) Statement接口
Statement 对象用于执行静态 SQL 语句,并返回执行结果对象,该接口的常用方法如下表所示:方法 | 功能描述 |
---|---|
execute(String sql) | 执行给定的 SQL 语句,返回是否有结果集 |
executeQuery(String sql) | 执行给定的 SQL 语句,返回单个 ResultSet 对象 |
executeUpdate() | 执行 INSERT、UPDATE 或 DELETE 语句,返回受该 SQL 语句影响的记录个数 |
5) PreparedStatement接口
PreparedStatement 接口是 Statement 接口的子接口。PreparedStatement 对象可以代表一个预编译的 SQL 语句。由于 PreparedStatement 会将传入的 SQL 命令编译并暂存在内存中,所以当某一 SQL 语句在程序中被多次执行时,使用 PreparedStatement 对象的执行速度要快于 Statement 对象。
如果数据库不支持预编译,那么系统将在 SQL 语句执行时传给数据库,其效果类似于 Statement 对象。与 Statement 相比,PreparedStatement 增加了在执行 SQL 语句调用之前,将输入参数绑定到 SQL 语句调用中的功能。当需要在同一个数据库表中完成一组记录的更新时,使用 PreparedStatement 是一个很好的选择。
该接口的常用方法如下表所示:
方法 | 功能描述 |
---|---|
executeQuery() | 执行查询语句,并返回该查询生成的ResultSet对象 |
executeUpdate() | 执行INSERT、UPDATE或DELETE语句,返回影响的记录个数 |
setInt(int index,int k) | 将指定位置的参数设置为int值 |
setFloat(int index, float f) | 将指定位置的参数设置为float值 |
setString(int index, String s) | 将指定位置的参数设置为对应的String值 |
clearParameters() | 清除当前所有参数的值 |
6) ResultSet接口
ResultSet 对象类似于一个临时表,用于存放 JDBC 的执行结果。该对象内部有一个指向当前数据行的指针,初始状态时,默认指向第一条记录之前。通过调用 next() 方法可以使指针下移一行,如果没有下一行,则返回 false。ResultSet 接口提供的 getXxx() 方法可以根据列的索引编号或列的名称检索对应列的值,其中以列的索引编号较为高效,编号从 1 开始。其中,Xxx 代表 JDBC 中的 Java 数据类型。
该接口的常用方法如下表所示:
方法 | 功能描述 |
---|---|
getInt(int columnIndex) | 获取指定列位置的int类型的值,参数代表指定列的索引编号 |
getInt(String columnName) | 获取指定列名称的int类型的值,参数代表指定列的名称 |
getString(int columnIndex) | 获取指定列位置的String类型的值,参数代表指定列的索引编号 |
getString(String columnName) | 获取指定列名称的String类型的值,参数代表指定列的名称 |
next() | 将指针向下移动一行 |
first() | 将指针移到第一行 |
last() | 将指针移到最后一行 |
getRow() | 查看当前行的索引号 |