多占位符 PreparedStatement 完整示例
1、多条件 SQL 场景2 个占位符演示需求根据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();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 开始不是 0第一个?是1赋值顺序必须和 SQL 中?出现顺序一一对应不同类型使用对应set方法类型不匹配会抛数据库异常不管多少个占位符都能完全防止 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(); } }

相关新闻