执行“ query”方法时,JdbcTemplate返回一个空列表。

public List<Loan> getLoanDAO(Employee employee, String s) {
    final String SQL = "SELECT CTLPCODCIA, CTLPCODSUC, CTLPCODTRA, EMPNOMBRE, EMPAPATERN, EMPAMATERN, CTLPCODPRE, "
            + "CTLPTIPPRE, TIPDESPRE, CTLPMONEDA, CTLPESTADO, CTLPMONTOP, CTLPNROCUO, CTLPCUOTA, FLAGTIPOCUOTA, CTLGLOSA, CTLDIASFR, "
            + "CTLDOCADJ, CTLUSUCREA, CTLFECCREA "
            + "FROM HR_CTLPREC_SS INNER JOIN HR_EMPLEADO ON CTLPCODCIA=EMPCODCIA AND CTLPCODSUC=EMPCODSUC AND CTLPCODTRA=EMPCODTRA "
            + "INNER JOIN HR_TIPPRE ON CTLPCODCIA=TIPCODCIA AND CTLPCODSUC=TIPCODSUC AND CTLPTIPPRE=TIPCODPRE "
            + "WHERE TIPFLGEST = '1' AND TIPSELFSERVICE = '1' "
            + "AND CTLPCODCIA = ? AND CTLPCODSUC = ? AND EMPCODTRAJEF = ? AND CTLPESTADO = ? ";
    List<Loan> loans = jdbcTemplate.query(SQL, new Object[] {
            employee.getCTLPCODCIA(), employee.getCTLPCODSUC(), employee.getCTLPCODTRA(), s }, loanMapper);
    return loans;
}


但是,在替换“?”时使用与执行和在sqldeveloper中执行相同的参数,它将返回4行。我不知道这是怎么回事,因为我一直以相同的方式对所有其他实体执行数据访问代码。



问题解决了

正如@Julian所说:


  JdbcTemplate是已被大量应用程序使用的经过验证的spring组件,因此,我认为它一定是代码中的错误。


这不是JdbcTemplate的问题,也不是我的代码。这是IDE的问题。我只是使用maven控制台命令从头开始构建项目,并且代码按预期工作。

谢谢大家。

最佳答案

JdbcTemplate是已被大量应用程序使用的经过验证的spring组件,因此,我认为它一定是代码中的错误。
不确定您使用的是哪个版本的Spring,但jdbcTemplate.query是否期望Loan Mapper类作为其参数之一。您的代码中没有这样的映射器。

我建议您在查询之前放置一个断点,并检查employee字段,看看它们是否与您在sqldeveloper中播放的值匹配。

引起我注意的另一件事是您的EMPCODTRAJEF =?在查询定义中,但您使用employee.getCTLPCODTRA()作为参数。显然,我不知道您的数据模型,但应该是employee.getEMPCODTRAJEF()还是相反?

关于java - JdbcTemplate返回空列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53937717/

10-10 19:57