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
// 遍历结果集(流式处理)
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 ListgetAllUsers() {
Listusers = 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

浙公网安备 33010602011771号