JdbcTemplate返回空列表

时间:2018-12-26 22:13:28

标签: java spring jdbctemplate

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控制台命令从头开始构建项目,并且代码按预期工作。

谢谢大家。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

如果这行不通,请仔细检查您的论点。

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 CTLPCODCIA=? AND CTLPCODSUC = ? AND EMPCODTRAJEF = ? AND CTLPESTADO = ? "
            + "AND TIPFLGEST='1' AND TIPSELFSERVICE='1'";

将此添加到application.properties以调试查询。 logging.level.org.springframework.jdbc.core = TRACE