多占位符 PreparedStatement 完整示例
2026/7/9 1:58:56 网站建设 项目流程

1、多条件 SQL 场景(2 个占位符演示)

需求:根据user_idusername双重条件查询用户

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();

2、多种数据类型混合占位符(新增 age、create_time 4 个占位符)

需求:新增用户,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();

3、常用 setXxx 方法对照表

表格

占位符数据类型赋值方法
整数 intsetInt(下标, 值)
字符串 varcharsetString(下标, 值)
小数 doublesetDouble(下标, 值)
日期 datesetDate(下标, Date对象)
布尔 booleansetBoolean(下标, true/false)

4、关键注意点

  1. 占位符下标从 1 开始,不是 0,第一个?1
  2. 赋值顺序必须和 SQL 中?出现顺序一一对应;
  3. 不同类型使用对应set方法,类型不匹配会抛数据库异常;
  4. 不管多少个占位符,都能完全防止 SQL 注入。

5、完整可运行带遍历结果集示例

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(); } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询