Spring-JDBC:在使用JdbcTemplate进行条件查询时没有返回数据,但是sql直接在数据库中执行是有数据返回的。
2017-12-02 20:12
1896 查看
在使用JdbcTemplate进行条件查询时没有返回数据,但是sql直接在数据库中执行是有数据返回的。
对应sql:SELECT count(1) FROM emp WHERE 1=1 and job like ? and deptno=?
对应参数数组:[%销售员%, 30]
对应sql:SELECT * FROM emp WHERE 1=1 and job like ? and deptno=? limit ?,?
对应参数数组:[%销售员%, 30, 0, 10]
结果:{"data":[],"result":"success","total_count":0} 说明程序没有报错,但是data为空。
部分代码:
@Override
public PageBean<Employee> page(Integer pageCode, Integer preCounts, Employee employee) throws Exception {
StringBuffer countPrefixSql = new StringBuffer("SELECT count(1) FROM emp ");
StringBuffer dataPrefixSql = new StringBuffer("SELECT * FROM emp ");
StringBuffer whereSql = new StringBuffer("WHERE 1=1 ");
List<Object> paramsValue = new ArrayList<>();
String job = employee.getJob();
if(null != job && !job.trim().isEmpty()) {
whereSql.append("and job like ? ");
paramsValue.add("%"+job+"%");
}
Integer deptNo = employee.getDeptno();
if(null != deptNo) {
whereSql.append("and deptno=? ");
paramsValue.add(deptNo);
}
String countSql = countPrefixSql.append(whereSql).toString();
Object[] args = paramsValue.toArray(new Object[paramsValue.size()]);
System.out.println(countSql);
System.out.println(Arrays.toString(args));
Integer count = jdbcTemplate.queryForObject(countSql, args, Integer.class);
dataPrefixSql.append(whereSql).append("limit ?,?");
paramsValue.add((pageCode - 1)*preCounts);
paramsValue.add(preCounts);
PageBean<Employee> pageBean = new PageBean<>();
System.out.println(Arrays.toString(paramsValue.toArray()));
System.out.println(dataPrefixSql.toString());
List<Employee> dataList = jdbcTemplate.query(dataPrefixSql.toString(),
new BeanPropertyRowMapper<>(Employee.class), paramsValue.toArray());
pageBean.setTotalCounts(count);
pageBean.setDataList(dataList);
pageBean.setPageCode(pageCode);
pageBean.setPreCounts(preCounts);
return pageBean;
}
问题:jdbcTemplate在执行条件查询有什么需要注意的地方?
对应sql:SELECT count(1) FROM emp WHERE 1=1 and job like ? and deptno=?
对应参数数组:[%销售员%, 30]
对应sql:SELECT * FROM emp WHERE 1=1 and job like ? and deptno=? limit ?,?
对应参数数组:[%销售员%, 30, 0, 10]
结果:{"data":[],"result":"success","total_count":0} 说明程序没有报错,但是data为空。
部分代码:
@Override
public PageBean<Employee> page(Integer pageCode, Integer preCounts, Employee employee) throws Exception {
StringBuffer countPrefixSql = new StringBuffer("SELECT count(1) FROM emp ");
StringBuffer dataPrefixSql = new StringBuffer("SELECT * FROM emp ");
StringBuffer whereSql = new StringBuffer("WHERE 1=1 ");
List<Object> paramsValue = new ArrayList<>();
String job = employee.getJob();
if(null != job && !job.trim().isEmpty()) {
whereSql.append("and job like ? ");
paramsValue.add("%"+job+"%");
}
Integer deptNo = employee.getDeptno();
if(null != deptNo) {
whereSql.append("and deptno=? ");
paramsValue.add(deptNo);
}
String countSql = countPrefixSql.append(whereSql).toString();
Object[] args = paramsValue.toArray(new Object[paramsValue.size()]);
System.out.println(countSql);
System.out.println(Arrays.toString(args));
Integer count = jdbcTemplate.queryForObject(countSql, args, Integer.class);
dataPrefixSql.append(whereSql).append("limit ?,?");
paramsValue.add((pageCode - 1)*preCounts);
paramsValue.add(preCounts);
PageBean<Employee> pageBean = new PageBean<>();
System.out.println(Arrays.toString(paramsValue.toArray()));
System.out.println(dataPrefixSql.toString());
List<Employee> dataList = jdbcTemplate.query(dataPrefixSql.toString(),
new BeanPropertyRowMapper<>(Employee.class), paramsValue.toArray());
pageBean.setTotalCounts(count);
pageBean.setDataList(dataList);
pageBean.setPageCode(pageCode);
pageBean.setPreCounts(preCounts);
return pageBean;
}
问题:jdbcTemplate在执行条件查询有什么需要注意的地方?
相关文章推荐
- java JDBC 连接数据库查询数据与直接使用sql的疑问
- Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用
- 同样的一句SQL语句在pl/sql 代码块中count 没有数据,但是直接用SQl 执行却可以count 得到结果
- JDBC之使用Spring提供的JdbcTemplate进行数据库操作
- spring多数据源的处理 mybatis实现跨库查询 实现Myibatis动态sql跨数据库的处理 Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样
- com.microsoft.sqlserver.jdbc.SQLServerException: 此查询使用的不是 ANSI 外部联接运算符("*=" 或 "=*")。若要不进行修改即运行此查询,请使用存储过程 sp_dbcmptlevel 将当前数据库的
- Entity Framework(EF) 直接执行数据库命令并返回 DataTable 数据参数化 SQL 语句
- Hibernate的hql语句查询不到内容,但是库里有数据,直接执行SQL也能执行,能得到值,返回值取不到
- 安卓开发SQlite使用执行SQL语句一些简单的处理——2.查询数据库的数据
- 【springMVC 后台跳转前台】1.使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中 ----2.前后台都没有报错,不能进入ajax回调函数
- 使用spring的jdbcTemplate-----用JDBC模板查询数据库
- Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用
- 使用SSH添加数据时执行了SQL语句数据库却什么都没有?
- [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现
- Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用
- java JDBC 连接数据库查询数据与直接使用sql的疑问
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- 直接使用sql语句查询数据库数据
- MyBatis直接执行SQL查询及批量插入数据
- 程序返回插入数据库成功,但是数据库内却没有数据