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