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