JDBC编程核心笔记

一、JDBC编程六步法
text
┌─────────────────────────────────────────┐
│ ① 加载驱动 │
│ ② 获取连接 │
│ ③ 创建执行对象 → 执行SQL │
│ ④ 处理结果集 │
│ ⑤ 关闭资源(实际开发中必须做) │
└─────────────────────────────────────────┘
第二步详解:加载驱动
java
Class.forName(DRIVER);
常用数据库驱动:

数据库 DRIVER
MySQL com.mysql.jdbc.Driver
Oracle oracle.jdbc.driver.OracleDriver
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver
第三步详解:获取连接
java
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
URL格式示例:

MySQL:jdbc:mysql://localhost:3306/数据库名

Oracle:jdbc:oracle:thin:@localhost:1521:数据库名

第四步详解:执行SQL的两种方式
方式一:Statement(无参数SQL)
适用场景: SQL语句不需要传递参数(如查询全部数据)

java
Statement stmt = conn.createStatement();
// 查询操作
ResultSet rs = stmt.executeQuery("SELECT * FROM User");
// 增删改操作
int count = stmt.executeUpdate("DELETE FROM User WHERE id=1");
方式二:PreparedStatement(带参数SQL)⭐推荐
适用场景: SQL语句中有参数传递(条件查询、增、删、改)

java
// 1. 编写带占位符 ? 的SQL
String sql = "INSERT INTO User(name, email, password, birthday) VALUES(?, ?, ?, ?)";

// 2. 预编译SQL
PreparedStatement pst = conn.prepareStatement(sql);

// 3. 给占位符赋值(下标从1开始)
pst.setString(1, user.getName());
pst.setString(2, user.getEmail());
pst.setString(3, user.getPassword());
pst.setString(4, user.getBirthday());

// 4. 执行
int count = pst.executeUpdate(); // 增删改用这个
ResultSet rs = pst.executeQuery(); // 查询用这个
PreparedStatement常用设值方法:

方法 说明
setString(位置, 值) 设置字符串
setInt(位置, 值) 设置整数
setDouble(位置, 值) 设置小数
setDate(位置, 值) 设置日期
setBoolean(位置, 值) 设置布尔值
第五步详解:处理结果集
情况1:查询操作 → 结果集转集合
java
// 准备一个集合容器
List users = new ArrayList<>();

// 遍历结果集(流式处理)
while (rs.next()) {
User user = new User(); // 创建对象
user.setId(rs.getInt("id")); // 从结果集取数据
user.setName(rs.getString("name"));
user.setBirthday(rs.getString("birthday"));
user.setEmail(rs.getString("email"));
user.setPassword(rs.getString("password"));
users.add(user); // 添加到集合
}
执行流程:

text
数据库User表 → ResultSet结果集(流) → ArrayList集合
(记录) (游标移动) (内存存储)
rs.next() 方法说明:

返回 true:还有下一条数据,游标向下移动一行

返回 false:没有更多数据了

情况2:增删改操作 → 返回受影响行数
java
int affectedRows = pst.executeUpdate();
返回值含义 说明

0 操作成功,返回值为受影响的行数(插入/修改/删除的记录数)
= 0 操作执行了但没有数据受影响
抛异常 操作失败(如SQL语法错误)
完整代码示例
查询所有用户
java
public List getAllUsers() {
List users = new ArrayList<>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;

try {
    // ① 加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    // ② 获取连接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "123456");
    // ③ 创建执行对象并执行
    stmt = conn.createStatement();
    rs = stmt.executeQuery("SELECT * FROM User");
    // ④ 处理结果集
    while (rs.next()) {
        User user = new User();
        user.setId(rs.getInt("id"));
        user.setName(rs.getString("name"));
        user.setEmail(rs.getString("email"));
        users.add(user);
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    // ⑤ 关闭资源
    try { if (rs != null) rs.close(); } catch (Exception e) {}
    try { if (stmt != null) stmt.close(); } catch (Exception e) {}
    try { if (conn != null) conn.close(); } catch (Exception e) {}
}
return users;

}
插入用户
java
public boolean addUser(User user) {
Connection conn = null;
PreparedStatement pst = null;

try {
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "123456");
    
    String sql = "INSERT INTO User(name, email, password, birthday) VALUES(?, ?, ?, ?)";
    pst = conn.prepareStatement(sql);
    pst.setString(1, user.getName());
    pst.setString(2, user.getEmail());
    pst.setString(3, user.getPassword());
    pst.setString(4, user.getBirthday());
    
    int count = pst.executeUpdate();
    return count > 0;  // 受影响行数 > 0 表示插入成功
    
} catch (Exception e) {
    e.printStackTrace();
    return false;
} finally {
    try { if (pst != null) pst.close(); } catch (Exception e) {}
    try { if (conn != null) conn.close(); } catch (Exception e) {}
}

}

查询→ResultSet→while遍历→转集合
增删改→int返回→判断是否>0

posted @ 2026-05-07 10:15  崩崩  阅读(8)  评论(0)    收藏  举报