java - 查询可能不存在的行的正确方法 - Java8
问题描述
我正在尝试编写一种方法来检索数据库中的一行。大约 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")
)
);
}
我怎样才能重新编写它以使其更有意义?
解决方案
是否可以选择在您的项目中使用 3rd-party 库?
这可以用我自己的方法更简单地完成:
<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"))));
}
}
推荐阅读
- python - 如何计算两个坐标系之间的平均/最佳旋转?
- javascript - CKEditor 5 版本 29(在线生成器) - 无法加载自定义构建
- tableau-desktop - 如何将子类别值转换为表格文本表中的列
- php - 刷新后会话数据不可用
- python - 在桌面应用程序上显示假名
- java - Groovy 自定义 MetaClassImpl 导致“找不到匹配的构造函数”
- python - 为什么 X 和 Y 的变化对 w4 和 w2 没有影响?
- javascript - 通过 id 从 prisma 客户端获取最新数据
- python - 向包含标签 Django 发送消息
- python - Python 更新 YAML 而不更改格式