prepraredStatement.setString(index,value)

本文探讨了在Java中使用PreparedStatement进行SQL查询时,参数绑定与字符串拼接的区别。通过示例展示了当字段名作为变量时,直接拼接与使用?占位符的不同效果,解释了为何使用预编译语句可以防止SQL注入并提高查询效率。内容包括正确使用setString方法来构造有效查询语句的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

prepraredStatement.setString(index,value)
index:sql语句中第几个问号? ,(1,2,3,…)
value:String

	/*
	 * 总:使用setString方法会所形成的sql语句会在你的变量上加上单引号,字段名是变量要使用拼接,变量也可以使用拼接,拼接yyds
	 * 使用prep.toString()方法能够看到形成的sql语句
	 * 
	 * contains(String name,String value)
	 * name=email,value=1327680696@qq.com
	 * sql语句:SELECT * FROM d_user WHERE email="1327680696@qq.com";
	 * 
	 * 合起来写导致语句称为第一种情况,查询不到:
	 * String sql = "select * from d_user where ? = ?;";
	 * prep.setString(1, name);
	 * prep.setString(2, value);
	 * System.out.println(prep.toString());
	 * rs = prep.executeQuery();--->
	 * select * from d_user where 'email' = '1327680696@qq.com';查询不到
	 * 给字段加上了引号,查询不到
	 * 
	 * 分开写,语句变成了下面这种情况,查询得到
	 * String sql = "select * from d_user where email = ?;--->
	 * select * from d_user where email = '1327680696@qq.com';查到
	 * 
	 * 尝试拼接:
	 * String sql = "select * from d_user where "+name+" = ?;";
	 * prep.setString(1, value);---->
	 * select * from d_user where email = '1327680696@qq.com';查到
	 */
	public static boolean contains(String name,String value){
		boolean isContain = false;
		Connection con = null;
		PreparedStatement prep = null;
		ResultSet rs = null;
		con = DBUtil.getCon();
//		String sql = "select * from d_user where ? = ?;";
		String sql = "select * from d_user where "+name+" = ?;";
		System.out.println(name+value);
		try {
			prep = con.prepareStatement(sql);
//			prep.setString(1, name);
//			prep.setString(2, value);
			prep.setString(1, value);
			System.out.println(prep.toString());
			rs = prep.executeQuery();
			if(rs.next()){
				System.out.println("yes");
				isContain = true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		try {
			DBUtil.close(rs, prep, con);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return isContain;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

且放白鹿青涯间

你的打赏将是我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值