title: order by 后面用占位符’?'导致排序失败
date: 2020-08-03 20:23:02
tags: jdbc.mysql
categories: 编程
String sql = "select empno,ename,sal from emp where sal > ? and sal < ? order by ? desc";
//预编译
ps = conn.prepareStatement(sql);
//设置占位符,绑定参数
ps.setInt(1,1000);
ps.setInt(2,3000);
// ps.setString(3,“sal”); order by 后面设置占位符会让order by失效
情况一、使用预编译的数据库操作对象在order by后面设置占位符,再通过.setString()方法填入参数会导致排序失败
情况二、使用mybatis的时候,在mapper sql映射.xml文件中,在order by 后面使用 #{参数名} 依然会导致排序失败,因为mybatis #{} 使用的是PrepareStatement
情况二解决办法:把#{}改成${}, #{}是预编译,相当于PrepareStatement;${}是普通字符串的拼接,相当于Statement