JdbcTemplate возвращает пустой список - PullRequest
0 голосов
/ 27 декабря 2018

JdbcTemplate возвращает пустой список при выполнении метода " query ".

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 - проверенный пружинный компонент, используемый огромным количеством приложений, поэтому, на мой взгляд, это должно быть ошибкой в ​​вашем коде.

Это не было проблемойс JdbcTemplate , ни мой код.Это была проблема из IDE.Я просто строю свой проект с нуля, используя консольные команды maven, и код работает как задумано.

Спасибо, ребята.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Если это не сработает, дважды проверьте ваши аргументы.

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

0 голосов
/ 27 декабря 2018

JdbcTemplate - проверенный пружинный компонент, используемый огромным количеством приложений, поэтому, на мой взгляд, это должно быть ошибкой в ​​вашем коде.Не уверен, какую версию Spring вы используете, но jdbcTemplate.query будет ожидать класс Loan Mapper в качестве одного из аргументов.В вашем коде нет такого сопоставителя.

Я предлагаю вам поставить точку останова непосредственно перед запросом, проверить поля сотрудников и посмотреть, соответствуют ли они значениям, которые вы используете в sqldeveloper.

Еще одна вещь, которая привлекает мое внимание, - третья, где у вас есть EMPCODTRAJEF =?в определении запроса, но вы используете employee.getCTLPCODTRA () в качестве аргумента.Очевидно, я не знаю вашу модель данных, но она должна быть employee.getEMPCODTRAJEF () или наоборот?

...