Expected positional parameter count: 1, actual parameters: [] [select count(*) from pay where date_format(month,'%Y-%m')=?
你的参数没穿进去 检查参数那块
java中PreparedStatement实例化对象pstmt.setString(1,"2018-02-10"),我怎么记得是从1开始,不是从0开始,而且时间格式的貌似在sql语句里边拼接不太好用,用SimpleDateFormat在程序中处理时间之后再比对试试?
上面拼接sql的if判断中怎么没有payname== null
一楼的说的对,下标从1开始,可以试试
请教大佬就是下面查询时间的sql怎么改,我这样写不行
public List list(PageMoudel page, String pay_month, String pay_name) {
String sql = "select p.id,p.name,p.month,p.baseMoney,p.overTime,p.safety,p.absent,p.verify,p.age from pay p ";
if(pay_month != null){
sql += "where date_format(p.month,'%Y-%m')= ? ";
}
else if(pay_name != null && pay_name !=""){
sql += " where p.name like ? ";
}
// sql += " order by p.month desc";
//Query query= getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Pay.class));
Query query=getSession().createSQLQuery(sql);
if(pay_month != null&& pay_name== null ){
query.setParameter(0,pay_month);
}
else if(pay_month==null && pay_name != null){
query.setParameter(1,"%" + pay_name + "%");
}
else if(pay_name != null && pay_name !="" && pay_month != null){
query.setParameter(0,pay_month);
query.setParameter(0,"%" + pay_name + "%");
}
query.setFirstResult((page.getPage() - 1) * page.getPageSize());
query.setMaxResults(page.getPageSize());
List<Pay> pays=query.list();
return pays;
}
public int getTotalCountQuery(String pay_month,String pay_name){
String sql="select count(*) from pay";
if(pay_month != null&&pay_name == null){
//sql += " where month like ? ";
sql += "where date_format(month,'%Y-%m')=?";
}
// sql += "where date_format(month,'%Y-%m')='2018-02' ";
else if(pay_name != null &&pay_month==null){
sql += "where name like ? ";
}
Query query=getSession().createSQLQuery(sql);
// Query query= getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Pay.class));
if(pay_month!=null&&pay_name==null){
query.setParameter(0,pay_month);
}
else if(pay_month==null && pay_name != null){
query.setParameter(0,"%" + pay_name + "%");
}
else if(pay_name != null && pay_name !="" && pay_month != null){
query.setParameter(0,pay_month);
query.setParameter(1,"%" + pay_name + "%");
}
BigInteger count=(BigInteger) query.uniqueResult();
return count.intValue();
}
首先说变量名命名问题, 你这命名还有下划线?
pay_Month改成payMonth, pay_name改为payName
if(payMonth != null && payMonth != ""){
sql += "where date_format(p.month,'%Y-%m') = " + payMonth;
}
if(payName != null && payName !=""){
sql += " where p.name like %" + payName + "%" ;
}
下面就不需要query.setParameter()了