〇、前情提要
写了条语句结果遇到了Unknown column ’ ’ in 'where clause’报错。
参考:
- 数据库 —— 查询避免 Unknown column ‘xxx’ in ‘where clause’ 错误
https://blog.csdn.net/qq_19865749/article/details/76883891
一、问题分析
原sql语句
public List<media> findAllMedia(User user) {
int sysType = user.getSysType();
String ucomp = user.getSysComp();
//1.获取连接
String sql = null;
if( sysType == 11 ){
sql = "select * from media";
}
else {
sql = "select * from media where ava = 1 AND comp = "+ ucomp;
}
console报错
翻译:列名不存在的结论
二、解决
参考
参考:
数据库 —— 查询避免 Unknown column ‘xxx’ in ‘where clause’ 错误
https://blog.csdn.net/qq_19865749/article/details/76883891
单从字面理解,我们很容易得出列名不存在的结论,但是,很多时候起始并不是由于列名出错造成的。而是由于拼凑sql语句时对字符类型数据没有用引号引起来造成的。
例如:一个hql语句:final String hql = "from ActiveCert ac where ac.issuerName="+issueName";
设置issueName值为ysy,则错误如下:
Unknown column ‘ysy′ in ‘where clause’
sql中如果issueName是整型的倒不会出现什么错误,而如果sql中字符串类型必须要包含在引号内。
所以修改hql为:final String hql = "from ActiveCert ac where ac.issuerName='"+issueName+"'";
则错误消失。
分析
我想写的是comp该列要与ucomp相符,但在拼凑sql语句时,对字符类型数据要用引号引起来。
纠正
sql = "select * from media where ava = 1 AND comp = '"+ ucomp +"'";
三、测试
成功查询到符合条件的记录。