JDBC简介
简介
JDBC 全称 Java Database Connectivity,是标准Java API,以帮助Java编程语言和各种数据库之间的连接。
JDBC库提供下述任务的API,它们通常与数据库的使用有关
- 连接一个数据库
- 创建一个SQL、MySQL语句
- 执行SQL、MySQL检索
- 查看、修改结果记录
从根本上说,JDBC是一种规范,它提供了一套完整的接口,允许对底层数据库进行便携式访问。Java可以用来编写不同类型的可执行文件:
- Java应用
- Java小程序
- Java Servlets
- Java ServerPages (JSP)
- 企业JavaBeans(EJB)
所有这些不同的可执行文件都能够使用JDBC驱动程序来访问数据库,并利用存储的数据。
架构
大体上JDBC API分为两层:
- JDBC API - 提供应用 - JDBC 管理器的连接
- JDBC API 驱动 - 支持JDBC 管理器 - 驱动的连接
JDBC API使用一个驱动管理器和特定数据库的驱动来提供对异质数据库的透明连接。
JDBC驱动程序管理器确保使用正确的驱动程序来访问每个数据源。驱动程序管理器能够支持多个并发的驱动程序连接到多个异构数据库。
常用JDBC组件
JDBC API提供下述借口和类:
- DriverManager - 使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动相匹配。第一个能识别JDBC下某个子协议的驱动程序将被用来建立数据库连接。
- Driver - 这个接口处理与数据库服务器的通信。你将很少与Driver对象直接交互。相反,你会使用DriverManager对象,它负责管理这种类型的对象。它还抽象了与Driver对象有关的细节。
- Connection - 这个接口具有与数据库联系的所有方法。连接对象代表通信上下文,也就是说,所有与数据库的通信只通过连接对象。
- Statement - 你使用从这个接口创建的对象来向数据库提交SQL语句。一些派生接口除了执行存储过程外,还接受参数。
- ResultSet - 这些对象持有你使用Statement对象执行SQL查询后从数据库中获取的数据。它作为一个迭代器,允许你在其数据中移动。
- SQLException - 该类处理数据库应用中发生的任何错误。
示例代码
创建JDBC应用
- 导入包 - 包括含有数据库编程所需的JDBC类的包。大多数情况下,使用import java.sql.*就足够了。
- 建立连接 - 需要使用DriverManager.getConnection()方法来创建一个Connection对象,它代表与数据库的物理连接。
- 执行query - 要求使用一个Statement类型的对象来建立和提交一个SQL语句到数据库。
- 抽出结果集数据 - 要求你使用适当的ResultSet.getXXX()方法来检索结果集的数据。
- 清理环境 - 需要明确关闭所有数据库资源,而不是依赖JVM的垃圾收集。
FirstExample.java
import java.sql.*;
public class FirstExample {
static final String DB_URL = "jdbc:mysql://localhost/TUTORIALSPOINT";
static final String USER = "guest";
static final String PASS = "guest123";
static final String QUERY = "SELECT id, first, last, age FROM Employees";
public static void main(String[] args) {
// Open a connection
try(Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(QUERY);) {
// Extract data from result set
while (rs.next()) {
// Retrieve by column name
System.out.print("ID: " + rs.getInt("id"));
System.out.print(", Age: " + rs.getInt("age"));
System.out.print(", First: " + rs.getString("first"));
System.out.println(", Last: " + rs.getString("last"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}