// 根据条件得到总记录数
public int getByCount(String xm, String dw, String dh) {
StringBuilder sql = new StringBuilder("select count(*) from txl where 1=1");

List<String> params = new ArrayList<String>();
if (xm != null && !"".equals(xm.trim())) {
sql.append(" and xm like ?");
        params.add("'%" + xm + "%'");

}
if (dw != null && !"".equals(dw.trim())) {
sql.append (" and dw like ?");
params.add("%" + dw + "%");
}
if (dh != null &&!"".equals(dh.trim())) {
sql.append(" and dh like ?");
params.add("%" + dh + "%");
} try { // 执行查询, 返回结果的第一行的第一列
Long count = qr.query(sql.toString(), new ScalarHandler<Long>(), params.toArray());
return count.intValue();
} catch (Exception e) {
throw new RuntimeException(e);
}
} // 根据检索条件分页数据显示
public void getTxlByPageBean(PageBean<Txl> pb, String xm, String dw, String dh) {
int totalByCount = this.getByCount(xm, dw, dh);
pb.setTotalCount(totalByCount);
String sql = "select * from txl where 1=1 ";
List<Object> params = new ArrayList<Object>();
if (xm != null && xm != "") {
sql += " and xm like ?";
params.add("%" + xm + "%");
}
if (dw != null && dw != "") {
sql += " and dw like ?";
params.add("%" + dw + "%");
}
if (dh != null && dh != "") {
sql += " and dh like ?";
params.add("%" + dh + "%");
}
sql += " limit ?,?";
// 判断
if (pb.getCurrentPage() <= 0) {
pb.setCurrentPage(1); // 把当前页设置为1
} else if (pb.getCurrentPage() > pb.getTotalPage()) {
pb.setCurrentPage(pb.getTotalPage()); // 把当前页设置为最大页数
} // 1. 获取当前页: 计算查询的起始行、返回的行数
int currentPage = pb.getCurrentPage();
int index = (currentPage - 1) * pb.getPageCount(); // 查询的起始行
int count = pb.getPageCount();
params.add(index);
params.add(count);
try {
List<Txl> pageData = qr.query(sql, new BeanListHandler<Txl>(Txl.class), params.toArray());
pb.setPageData(pageData);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

解决方案 »

  1.   

    1,xm的模糊查询拼接有单引号,dw和dh没有哎
    2,上面的SQL拼装用了StringBuilder,下面的也用呀
    3,分页查询咱还是封装个插件吧,是mysql用limit,万一改数据库了就不适用了
      

  2.   

    建议试用动态sql组装组件,这么多if看着头麻 
    maven地址 <dependency>
        <groupId>com.moolbuy</groupId>
        <artifactId>m-orm-xsqlbuilder</artifactId>
        <version>1.0.1</version>
    </dependency>使用说明:
    https://gitee.com/00fly/rapid-xsqlbuilder
      

  3.   

    另外不建议使用传统占位符。
    使用了hibernate框架的话,看这儿  https://gitee.com/00fly/java-code-frame/blob/master/springmvc-hbn/src/test/java/com/fly/test/QueryTest.java
    使用了jpa框架的话,看这儿  https://gitee.com/00fly/java-code-frame/blob/master/springmvc-jpa-query/src/test/java/com/fly/test/TestJpaNativeQuery.java
    最后只使用了spring框架的话,看这儿  https://gitee.com/00fly/java-code-frame/blob/master/dbutils-jdbc/src/test/java/com/fly/test/JdbcTemplateTest.java
    https://gitee.com/00fly/effict-side/blob/master/dyn-sql-all/src/test/java/com/fly/test/XsqlBuilderTest.java改造dbutils框架支持命名参数可参考 https://blog.csdn.net/qq_16127313/article/details/83928760仅供参考!
      

  4.   

    catch (Exception e) {
                throw new RuntimeException(e);
            }
    你这个目的是啥?