查询可能不存在的行的正确方法-Java8
我正在尝试编写一个方法来检索数据库中的一行。大约有50%的时间,这一行将不存在。我尝试使用jdbcTemplate.queryForObject,但如果该行在数据库中不存在,则会引发异常。我认为尝试用这种方法是不好的 我了解到,如果您的数据可能为空,那么jdbcTemplate.query是一个更好的选择。但我只有返回一个列表才能让它工作。返回列表在这里没有意义,因为我只选择了一行,这可能存在,也可能不存在查询可能不存在的行的正确方法-Java8,java,spring,jdbc,jdbctemplate,Java,Spring,Jdbc,Jdbctemplate,我正在尝试编写一个方法来检索数据库中的一行。大约有50%的时间,这一行将不存在。我尝试使用jdbcTemplate.queryForObject,但如果该行在数据库中不存在,则会引发异常。我认为尝试用这种方法是不好的 我了解到,如果您的数据可能为空,那么jdbcTemplate.query是一个更好的选择。但我只有返回一个列表才能让它工作。返回列表在这里没有意义,因为我只选择了一行,这可能存在,也可能不存在 public List<LoanDetailsBean> getLoanDe
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")
)
);
}
public List getLoanDetailsByInsaddr(String insaddr){
字符串SQL\u GET\u LOAN\u DETAILS\u BY\u INSADDR=
“选择排名前1的cip.TranCessize,”+
“cip.到期日,”+
“cip.moodysissuerrating,”+
总督察+
“总督察穆迪评税,”+
“cip.snpassetrating”+
“来自CLO属性cip”+
“其中insaddr=?”+
“按更新时间描述订购”;
返回isdbJdbcTemplate.query(SQL_GET_LOAN_DETAILS_BY_INSADDR,new Object[]{INSADDR},(rs,rowNum)->
新租借地(
rs.getDouble(“恍惚”),
rs.getString(“到期日”),
rs.getString(“moodysissuerrating”),
rs.getString(“snpisuerrating”),
rs.getString(“Moodysasseting”),
rs.getString(“snpassetrating”)
)
);
}
我怎样才能重新编写这篇文章使其更有意义?在您的项目中有使用第三方库的选项吗 这可以用我自己的方法实现:
<dependency>
<groupId>com.github.buckelieg</groupId>
<artifactId>db-fn</artifactId>
<version>0.3.4</version>
</dependency>
com.github.buckelig
db-fn
0.3.4
然后:
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"))));
}
}
public List getLoanDetailsByInsaddr(String insaddr){
try(DB=newdb(“jdbc:postgresql://host:port/database?user=user&password=pass")) {
返回db.select(“从cloinstrumentproperty cip中选择前1个cip.TranceSize、cip.DurityDate、cip.moodysissuerrating、cip.snpissuerrating、cip.MoodySessating、cip.snpassetrating,其中insaddr=?ORDER BY updatedtime DESC”,insaddr)
.list(rs->new LoanDetailsBean(rs.getDouble(“TranceSize”)、rs.getString(“到期日”)、rs.getString(“moodysissuerrating”)、rs.getString(“snpissuerrating”)、rs.getString(“MoodySasseting”)、rs.getString(“snpassetrating”);
}
}
项目中是否有使用第三方库的选项
这可以用我自己的方法实现:
<dependency>
<groupId>com.github.buckelieg</groupId>
<artifactId>db-fn</artifactId>
<version>0.3.4</version>
</dependency>
com.github.buckelig
db-fn
0.3.4
然后:
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"))));
}
}
public List getLoanDetailsByInsaddr(String insaddr){
try(DB=newdb(“jdbc:postgresql://host:port/database?user=user&password=pass")) {
返回db.select(“从cloinstrumentproperty cip中选择前1个cip.TranceSize、cip.DurityDate、cip.moodysissuerrating、cip.snpissuerrating、cip.MoodySessating、cip.snpassetrating,其中insaddr=?ORDER BY updatedtime DESC”,insaddr)
.list(rs->new LoanDetailsBean(rs.getDouble(“TranceSize”)、rs.getString(“到期日”)、rs.getString(“moodysissuerrating”)、rs.getString(“snpissuerrating”)、rs.getString(“MoodySasseting”)、rs.getString(“snpassetrating”);
}
}
考虑到您有一个有效的解决方案,它是否真的会返回一个列表?另一种解决方案是将该方法设为私有,并将其封装在只返回单个对象(或null)的公共方法中。是否可以编写一个调用提供的解决方案并返回第一个元素的方法?如果列表中有多个元素,您的方法将抛出一个异常。考虑到您有一个有效的解决方案,它是否真的会返回一个列表?另一种解决方案是将该方法设为私有,并将其封装在只返回单个对象(或null)的公共方法中。是否可以编写一个调用提供的解决方案并返回第一个元素的方法?如果列表中有多个元素,您的方法将抛出异常。