第3课_数据库的增删改查操作
热度🔥:58 免费课程
授课语音
通过JDBC实现数据的增、删、改、查功能
在Java中,通过JDBC
(Java Database Connectivity)可以连接和操作数据库,实现数据的增、删、改、查功能。掌握JDBC
的基本使用方法,是Java开发人员处理数据库操作的重要技能之一。本课件将详细介绍如何通过JDBC
实现这些操作,并通过代码案例帮助大家深入理解。
1. JDBC基础概念
1.1 JDBC简介
JDBC
是Java语言用于操作关系型数据库的API,它提供了一种标准的方式来连接数据库、执行SQL查询、更新数据以及处理结果。JDBC
包括四个主要组件:
- Connection:表示与数据库的连接。
- Statement:用于执行SQL语句。
- ResultSet:表示查询结果。
- PreparedStatement:用于执行预编译的SQL语句,常用于防止SQL注入。
2. JDBC基本流程
使用JDBC
操作数据库的一般流程如下:
- 加载数据库驱动程序。
- 获取数据库连接。
- 创建
Statement
或PreparedStatement
对象。 - 执行SQL语句。
- 处理查询结果(对于
SELECT
查询)。 - 关闭连接,释放资源。
3. 通过JDBC实现数据的增、删、改、查功能
3.1 数据查询(SELECT)
SELECT
语句用于从数据库中查询数据,通常会返回一个ResultSet
对象,包含查询结果。
示例:查询所有学生信息
import java.sql.*;
public class JdbcSelectExample {
public static void main(String[] args) {
// 数据库连接参数
String url = "jdbc:mysql://localhost:3306/school";
String username = "root";
String password = "password";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
conn = DriverManager.getConnection(url, username, password);
// 创建Statement对象
stmt = conn.createStatement();
// 执行查询语句
String sql = "SELECT id, name, age FROM students";
rs = stmt.executeQuery(sql);
// 处理查询结果
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
}
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
中文注释:
- 连接到
school
数据库,查询students
表中的所有学生信息。 stmt.executeQuery(sql)
用于执行查询语句,返回一个ResultSet
对象。- 使用
rs.next()
逐行遍历结果集,并输出每个学生的id
、name
和age
。
3.2 数据插入(INSERT)
INSERT
语句用于向数据库中插入新的数据。可以使用Statement
或PreparedStatement
来执行插入操作。
示例:插入一条新的学生记录
import java.sql.*;
public class JdbcInsertExample {
public static void main(String[] args) {
// 数据库连接参数
String url = "jdbc:mysql://localhost:3306/school";
String username = "root";
String password = "password";
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
conn = DriverManager.getConnection(url, username, password);
// 准备插入的SQL语句
String sql = "INSERT INTO students (name, age) VALUES (?, ?)";
// 创建PreparedStatement对象
pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setString(1, "John");
pstmt.setInt(2, 20);
// 执行插入操作
int rowsAffected = pstmt.executeUpdate();
System.out.println("插入成功,影响的行数: " + rowsAffected);
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
中文注释:
- 使用
PreparedStatement
来执行插入操作,防止SQL注入攻击。 - 通过
pstmt.setString(1, "John")
和pstmt.setInt(2, 20)
设置插入数据的参数。
3.3 数据更新(UPDATE)
UPDATE
语句用于更新数据库中的数据。使用PreparedStatement
执行更新操作,可以有效避免SQL注入。
示例:更新学生的年龄
import java.sql.*;
public class JdbcUpdateExample {
public static void main(String[] args) {
// 数据库连接参数
String url = "jdbc:mysql://localhost:3306/school";
String username = "root";
String password = "password";
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
conn = DriverManager.getConnection(url, username, password);
// 准备更新的SQL语句
String sql = "UPDATE students SET age = ? WHERE name = ?";
// 创建PreparedStatement对象
pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setInt(1, 22);
pstmt.setString(2, "John");
// 执行更新操作
int rowsAffected = pstmt.executeUpdate();
System.out.println("更新成功,影响的行数: " + rowsAffected);
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
中文注释:
- 更新名为
John
的学生的age
字段为22岁。 - 使用
PreparedStatement
来设置更新的参数,避免SQL注入。
3.4 数据删除(DELETE)
DELETE
语句用于删除数据库中的数据。与UPDATE
类似,使用PreparedStatement
来执行删除操作。
示例:删除指定学生记录
import java.sql.*;
public class JdbcDeleteExample {
public static void main(String[] args) {
// 数据库连接参数
String url = "jdbc:mysql://localhost:3306/school";
String username = "root";
String password = "password";
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
conn = DriverManager.getConnection(url, username, password);
// 准备删除的SQL语句
String sql = "DELETE FROM students WHERE name = ?";
// 创建PreparedStatement对象
pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setString(1, "John");
// 执行删除操作
int rowsAffected = pstmt.executeUpdate();
System.out.println("删除成功,影响的行数: " + rowsAffected);
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
中文注释:
- 删除名为
John
的学生记录。 - 使用
PreparedStatement
来执行删除操作,确保数据安全性。
4. 总结与优化建议
4.1 总结
通过JDBC
,我们可以方便地实现对数据库的增、删、改、查操作。在实际开发中,常常使用PreparedStatement
来执行这些操作,因为它能够防止SQL注入,并提高执行效率。
4.2 优化建议
- 使用连接池:频繁的数据库连接和关闭可能会导致性能问题,建议使用连接池来管理数据库连接。
- 事务管理:在执行多次数据库操作时,可以使用事务来保证数据的一致性,避免部分操作失败。
- 批量操作:对于大量数据的插入、更新和删除操作,可以使用批量操作来提高效率。
通过本课程的学习,你应该已经掌握了通过JDBC
进行数据库操作的基本技能,能够独立进行增、删、改、查的实现。