Правильный способ запроса строки, которая может не существовать - Java8 - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь написать метод, который будет извлекать строку в базе данных. Примерно в 50% случаев этот ряд не будет существовать. Я попытался использовать jdbcTemplate.queryForObject, но это привело к исключению, если строка не существует в БД. Я не думаю, что это хорошая практика, пытаться поймать метод.

Я читал, что если ваши данные могут быть нулевыми, jdbcTemplate.query был лучшим выбором. Но я могу заставить его работать, только если верну список. Возвращать список здесь не имеет смысла, поскольку я выбираю только 1 строку, которая может существовать или не существовать.

public List<LoanDetailsBean> getLoanDetailsByInsaddr(String insaddr) {
     String SQL_GET_LOAN_DETAILS_BY_INSADDR =
                "SELECT TOP 1 cip.tranchesize, " +
                        "             cip.maturitydate, " +
                        "             cip.moodysissuerrating, " +
                        "             cip.snpissuerrating, " +
                        "             cip.moodysassetrating, " +
                        "             cip.snpassetrating " +
                        "FROM   cloinstrumentproperty cip " +
                        "WHERE  insaddr = ? " +
                        "ORDER  BY updatedtime DESC ";

     return isdbJdbcTemplate.query(SQL_GET_LOAN_DETAILS_BY_INSADDR, new Object[] { insaddr }, (rs, rowNum) ->
             new LoanDetailsBean(
                  rs.getDouble("tranchesize"),
                  rs.getString("maturitydate"),
                  rs.getString("moodysissuerrating"),
                  rs.getString("snpissuerrating"),
                  rs.getString("moodysassetrating"),
                  rs.getString("snpassetrating")
             )
     );
}

Как я могу переписать это, чтобы иметь немного больше смысла?

1 Ответ

0 голосов
/ 15 ноября 2019

Есть ли возможность использовать сторонние библиотеки в вашем проекте?

это можно сделать намного проще с моими собственными:

<dependency>
   <groupId>com.github.buckelieg</groupId>
   <artifactId>db-fn</artifactId>
   <version>0.3.4</version>
</dependency>

, а затем:

public List<LoanDetailsBean> getLoanDetailsByInsaddr(String insaddr) {
    try (DB db = new DB("jdbc:postgresql://host:port/database?user=user&password=pass")) {
         return db.select("SELECT TOP 1 cip.tranchesize, cip.maturitydate, cip.moodysissuerrating, cip.snpissuerrating, cip.moodysassetrating, cip.snpassetrating FROM cloinstrumentproperty cip WHERE insaddr=? ORDER BY updatedtime DESC", insaddr)
             .list(rs -> new LoanDetailsBean(rs.getDouble("tranchesize"), rs.getString("maturitydate"), rs.getString("moodysissuerrating"), rs.getString("snpissuerrating"), rs.getString("moodysassetrating"), rs.getString("snpassetrating"))));
    }
}
...