sql语句查询传参的问题

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()了

https://segmentfault.com/a/1190000002596858