String sql = "select * from sys_user where 1=2"与String sql = "select * from sys_user where 1=1的对比介绍



今天在公司的项目中看到String sql = "select * from sys_user where 1=2";还有String sql = "select * from sys_user where 1=1";这些sql语句,看了半天不大明白什么意思,请教了一下大佬,总结整理了一下;
String sql = "select * from sys_user where 1=2和
String sql = "select * from sys_user where 1=1的比较;
相同点:可以拼接字符串;
比如:
String sql="select * from user where 1=1 "; 


if(username!=null) sql=sql+ " and username='"+username+"'"; 


if(password!=null) sql=sql+ " and password='"+password+"'"; 


select id from sys_user where 1=1
<if test="username !=null and password != ''">
AND name = #{name}
</if>
<if test="firstType !=null and firstType != ''">
AND firstType = #{firstType}
</if>
<if test="secondType !=null and secondType != ''">
AND secondType = #{secondType}
</if>


因为我这里是动态查询,假如第一个条件不成立,那么如果我没有使用 1 = 1 ,
我的SQL就会变成 select XXX from XXX where  and XXXX ,
如果我加了1 = 1,就会变成 select XXX from XXX where 1 = 1 and XXXX;
从这里面可以看出在动态sql中.加了这个1=1是可以拼接sql语句的;
不同点:
String sql="select * from user where 1=1 "; 
此sql返回的永远为真,也就是true,
可以理解为条件永远为真,查出的是所有数据;
相当于String sql="select * from user;
比如:
String sql="select * from user where 1=1 "; 


if(username!=null) sql=sql+ " and username='"+username+"'"; 


if(password!=null) sql=sql+ " and password='"+password+"'"; 


后面两个条件username,password两者都为空也是可以查询的,因为还有前面的查询条件;
String sql = "select * from sys_user where 1=2
此sql返回的永远为假,也就是false,
可以理解为where条件不成立,虽然执行了查询,但是返回的是空数据;
使用这句sql永远不能查询到数据;
建议使用上面的1=1好点;
附:本人菜鸟如有错误欢迎指正,谢谢诸位大佬;
以下是实现上述要求的Java代码: ```java import java.sql.*; public class JdbcDemo { public static void main(String[] args) { try { // 加载驱动 Class.forName("com.mysql.jdbc.Driver"); // 定义数据库连接、用户名和密码 String url = "jdbc:mysql://vlab.tute.edu.cn:7006/数据库名称"; String user = "用户名"; String password = "密码"; // 获取连接对象 Connection conn = DriverManager.getConnection(url, user, password); // 创建语句对象 Statement stmt = conn.createStatement(); // 增加记录 String sql1 = "insert into sysuser(uname, upassword, telephone, email, wechat) values ('wang', 'king', '13999999999', 'wang@wang.com', 'kingofking')"; stmt.executeUpdate(sql1); // 修改记录 String sql2 = "update sysuser set upassword = '000000' where uname = 'wang'"; stmt.executeUpdate(sql2); // 删除记录 String sql3 = "delete from sysuser where uname = 'wang'"; stmt.executeUpdate(sql3); // 查询记录 ResultSet rs = stmt.executeQuery("select * from sysuser"); // 遍历ResultSet对象 while (rs.next()) { System.out.println(rs.getString("uname") + " " + rs.getString("upassword") + " " + rs.getString("telephone") + " " + rs.getString("email") + " " + rs.getString("wechat")); } // 关闭语句对象和连接对象 rs.close(); stmt.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } ``` 注意:在实际使用中,应该根据需求修改SQL语句,例如修改表名、字段名、增加条件等。同时,应该注意防止SQL注入攻击,避免用户输入恶意的SQL语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值