java.sql.SQLException:Unknown column '****' in 'where clause'错误问题原因以及如何解决?

在做数据库查询的时候,很容易碰到这样的错误。错误的原因是因为查询语句使用错误。比如一个用户表的属性有账号id(varchar)和密码password(varchar)当要查询的账号是数字的时候,如123456789可以使用查询语句select * from 表名 where id=123456789
但是,当要查询账号是字符串123456789@qq.com的时候,会报错java.sql.SQLException。
原因是123456789@qq.com的值是string类型的,所以,应加单引号'123456789@qq.com’
也就是使用查询语句select * from 表名 where id='123456789@qq.com'
也就是说:=号后的只要是String类型的就要加上单引号。
以上内容是引自凌世宇的博客

当然啦,还可以这么做
String a ="abc";
String sql = "select * from 表名 where id=''+'/ "+a+/" ';
当然转意有时候不写也不报错。

不过我个人觉得最好的方法还是使用参数绑定,这篇博客中介绍的还是忙详细的,我顺便总结下吧,

1:使用:形式、

Query query=session.createQuery(“from User user where user.name=:customername anduser:customerage=:age ”);
query.setString(“customername”,name);
query.setInteger(“customerage”,age);

2:使用?形式、

Query query=session.createQuery(“from User user where user.name=? and user.age =? ”);
query.setString(0,name);
query.setInteger(1,age);

主要就是这2中方式,至于setParameter()和setParameter()这两种方法以后在研究。这么做的好处就多了,既可以防止sql注入,也不用为引号操心。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值