java-JDBC基础
字数 1006 2025-08-11 21:26:27
JDBC基础教程
一、JDBC概述
JDBC(Java Database Connectivity)是Java提供的一套用于连接和操作关系型数据库的API。它解决了以下问题:
- 数据库差异问题:不同数据库厂商实现不同,JDBC提供统一接口
- 可移植性:应用程序通过JDBC与数据库交互,更换底层数据库时代码基本不变
工作流程:
程序 <---> JDBC <---> 数据库驱动 <---> 数据库
二、核心接口与类
JDBC API主要位于java.sql包中,包含以下重要组件:
1. Driver接口
- 所有JDBC驱动程序必须实现的接口
- 由数据库厂商提供实现类并打包为JAR文件
- 例如MySQL驱动:
mysql-connector-j-8.0.31.jar
2. DriverManager类
- 管理JDBC驱动程序
- 重要方法:
static void registerDriver(Driver driver) // 注册驱动程序 static Connection getConnection(String url, String user, String password) // 获取连接
3. Connection接口
- 表示Java程序与数据库的连接
- 重要方法:
Statement createStatement() // 创建Statement对象
4. Statement接口
- 执行SQL语句并返回结果
- 重要方法:
boolean execute(String sql) // 执行SQL语句,可能返回多个结果 int executeUpdate(String sql) // 执行INSERT/UPDATE/DELETE,返回影响行数 ResultSet executeQuery(String sql) // 执行SELECT,返回ResultSet
5. PreparedStatement接口
- Statement的子接口,用于预编译SQL语句
- 优点:
- 防止SQL注入
- 提高执行效率
- 简化参数化SQL编写
- 获取方式:
PreparedStatement prepareStatement(String sql)
6. ResultSet接口
- 保存查询结果集
- 特点:
- 结果以逻辑表格形式存储
- 内部有游标(指针)指向当前行
- 初始位置在第一行之前
- 常用方法:
boolean next() // 移动游标到下一行 String getString(String columnName) // 获取指定列的值
三、JDBC使用步骤
1. 注册驱动
推荐方式:
Class.forName("com.mysql.jdbc.Driver");
关于CLASSPATH的说明:
- 不建议设置环境变量CLASSPATH
- 现代IDE(如IDEA)会自动管理类路径
- 运行时可通过
-cp参数指定类路径
2. 获取连接
Connection con = DriverManager.getConnection(url, user, password);
URL格式:
jdbc:数据库类型://主机:端口/数据库名
示例:
Connection con = DriverManager.getConnection(
"jdbc:mysql://192.168.86.130:3306/testdb",
"test",
"password"
);
3. 创建Statement对象
Statement stt = con.createStatement();
4. 执行SQL语句
// 执行DDL/DML
stt.execute("CREATE TABLE users(id INT, name VARCHAR(20))");
// 执行查询
ResultSet rs = stt.executeQuery("SELECT * FROM users");
5. 处理结果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + ": " + name);
}
6. 释放资源
rs.close();
stt.close();
con.close();
最佳实践:
- 按打开顺序的逆序关闭资源
- 使用try-with-resources或finally块确保资源释放
四、高级主题
1. 参数化查询
PreparedStatement pstmt = con.prepareStatement(
"INSERT INTO users VALUES(?, ?)");
pstmt.setInt(1, 1001);
pstmt.setString(2, "John Doe");
pstmt.executeUpdate();
2. 事务处理
con.setAutoCommit(false); // 关闭自动提交
try {
// 执行多个SQL
con.commit(); // 提交事务
} catch (SQLException e) {
con.rollback(); // 回滚事务
}
3. 批处理
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO users VALUES(1, 'Alice')");
stmt.addBatch("INSERT INTO users VALUES(2, 'Bob')");
int[] counts = stmt.executeBatch();
五、总结
JDBC是Java数据库编程的基础,掌握以下核心概念至关重要:
- 理解JDBC架构和组件关系
- 熟悉标准使用流程
- 掌握Statement和PreparedStatement的区别
- 了解事务处理和批处理等高级特性
实际开发中应:
- 使用PreparedStatement防止SQL注入
- 确保资源正确释放
- 合理使用连接池提高性能
更多细节可参考官方JDBC文档和特定数据库的驱动文档。