在做数据库查询的时候,很容易碰到这样的错误。错误的原因是因为查询语句使用错误。比如一个用户表的属性有账号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注入,也不用为引号操心。