“经验沉淀“到底值多少分?增益上限在哪里?
2026/7/9 2:57:18
需求:根据user_id和username双重条件查询用户
java
运行
// 1. SQL 带两个 ? 占位符 String sql = "SELECT user_id, username, age FROM t_user WHERE user_id = ? AND username = ?"; PreparedStatement pst = conn.prepareStatement(sql); // 2. 按占位符顺序设置参数,下标从 1 开始 // 第一个 ? 赋值 int 类型 userId pst.setInt(1, userId); // 第二个 ? 赋值字符串类型 username pst.setString(2, "张三"); // 3. 执行查询 ResultSet rs = pst.executeQuery();需求:新增用户,INSERT 语句,4 个不同类型占位符
java
运行
// 4个占位符:int、varchar、int、date String insertSql = "INSERT INTO t_user(user_id, username, age, create_time) VALUES (?, ?, ?, ?)"; PreparedStatement pst = conn.prepareStatement(insertSql); // 依次给每个 ? 赋值 pst.setInt(1, 10001); // 第1位:int 用户ID pst.setString(2, "李四"); // 第2位:字符串用户名 pst.setInt(3, 25); // 第3位:int 年龄 pst.setDate(4, new Date(System.currentTimeMillis())); // 第4位:日期 // 执行增删改,使用 executeUpdate() int affectRows = pst.executeUpdate();表格
| 占位符数据类型 | 赋值方法 |
|---|---|
| 整数 int | setInt(下标, 值) |
| 字符串 varchar | setString(下标, 值) |
| 小数 double | setDouble(下标, 值) |
| 日期 date | setDate(下标, Date对象) |
| 布尔 boolean | setBoolean(下标, true/false) |
?是1;?出现顺序一一对应;set方法,类型不匹配会抛数据库异常;java
运行
import java.sql.*; public class JdbcMultiParamDemo { public static void main(String[] args) throws SQLException { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456"); // 两个占位符查询 String sql = "SELECT user_id, username, age FROM t_user WHERE age > ? AND username LIKE ?"; PreparedStatement pst = conn.prepareStatement(sql); // 第一个?:年龄大于20 pst.setInt(1, 20); // 第二个?:模糊匹配带"张"的名字 pst.setString(2, "%张%"); ResultSet rs = pst.executeQuery(); // 遍历结果集 while (rs.next()) { int id = rs.getInt("user_id"); String name = rs.getString("username"); int age = rs.getInt("age"); System.out.println("id:" + id + " name:" + name + " age:" + age); } // 关闭资源(规范写法) rs.close(); pst.close(); conn.close(); } }