技术原理
JDBC架构主要包括三个组件:
- JDBC API(Interface Layer)
- JDBC驱动管理程序(Driver Manager)
- JDBC驱动程序(Driver Layer)
Java应用程序发起数据库操作请求(如查询、更新),通过JDBC API接口与JDBC驱动管理程序通信,而JDBC驱动管理程序负责加载和管理JDBC驱动程序。JDBC驱动程序则负责与特定的数据库通信,发送SQL到数据库。数据库执行SQL操作并返回结果集。JDBC的系统架构请参见图1。
接口介绍
JDBC接口是一套提供给用户的API方法,使Java应用程序能够与各种不同的数据库进行交互。java.sql包是JDBC核心接口。表1介绍了JDBC中常用的一些接口和方法,涵盖了连接数据库、执行SQL语句、获取结果集、关闭连接等常见操作。
| 接口 | 接口功能描述 | 关键方法 | 方法功能描述 |
|---|---|---|---|
| java.sql.DriverManager | 管理JDBC驱动,提供获取数据库连接的入口。 | getConnection(String url, String user, String password) | 通过URL+用户名+密码建立数据库连接。 |
| getConnection(String url, Properties info) | 通过URL+Properties(含更多参数)建立数据库连接。 | ||
| java.sql.Connection | 代表与数据库的会话,管理事务和创建Statement。 | createStatement() | 创建Statement。 |
| prepareStatement(String sql) | 创建PreparedStatement。 | ||
| prepareCall(String sql) | 创建CallableStatement。 | ||
| close() | 关闭数据库连接。 | ||
| java.sql.Statement | 执行静态SQL语句(无参数)。 | executeQuery(String sql) | 执行查询类SQL语句,返回ResultSet。 |
| executeUpdate(String sql) | 执行数据修改类SQL语句(如增删改),返回影响行数。 | ||
| execute(String sql) | 执行任意SQL,返回布尔值表示是否有结果集。 | ||
| addBatch(String sql) | 添加批处理语句。 | ||
| executeBatch() | 执行批处理。 | ||
| close() | 关闭Statement对象。 | ||
| java.sql.PreparedStatement | 预编译SQL语句(支持参数化查询,防止SQL注入)。 | setInt(int parameterIndex, int x) | 设置参数。 |
| setString(int parameterIndex, String x) | |||
| setFloat(int parameterIndex, float x) | |||
| executeQuery() | 执行已编译的查询类SQL语句,返回ResultSet。 | ||
| executeUpdate() | 执行已编译的数据修改类SQL语句,返回影响行数。 | ||
| execute() | 执行已编译的任意SQL语句,返回布尔值表示是否有结果集。 | ||
| addBatch() | 添加预编译语句到批处理。 | ||
| executeBatch() | 执行批处理。 | ||
| close() | 关闭PreparedStatement对象。 | ||
| java.sql.CallableStatement | 调用数据库存储过程。 | registerOutParameter(int parameterIndex, int type) | 注册输出参数。 |
| getInt(int columnIndex) | 获取存储过程的输出参数值。 | ||
| getString(int columnIndex) | |||
| getFloat(int columnIndex) | |||
| java.sql.ResultSet | 表示查询结果集。 | next() | 移动游标到下一行。 |
| getInt(int columnIndex) | 按列标获取int型数据。 | ||
| getInt(String columnLabel) | 按列名获取int型数据。 | ||
| getString(int columnIndex) | 按列标获取String型数据。 | ||
| getString(String columnLabel) | 按列名获取String型数据。 | ||
| getMetaData() | 获取结果集元数据(如列名、类型)。 | ||
| close() | 关闭ResultSet对象。 | ||
| java.sql.ResultSetMetaData | 描述结果集的元数据(如列名、类型等)。 | getColumnCount() | 获取列数。 |
| getColumnName(int column) | 获取列名。 | ||
| getColumnTypeName(int column) | 获取列类型。 |

