Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询可能不存在的行的正确方法-Java8_Java_Spring_Jdbc_Jdbctemplate - Fatal编程技术网

查询可能不存在的行的正确方法-Java8

查询可能不存在的行的正确方法-Java8,java,spring,jdbc,jdbctemplate,Java,Spring,Jdbc,Jdbctemplate,我正在尝试编写一个方法来检索数据库中的一行。大约有50%的时间,这一行将不存在。我尝试使用jdbcTemplate.queryForObject,但如果该行在数据库中不存在,则会引发异常。我认为尝试用这种方法是不好的 我了解到,如果您的数据可能为空,那么jdbcTemplate.query是一个更好的选择。但我只有返回一个列表才能让它工作。返回列表在这里没有意义,因为我只选择了一行,这可能存在,也可能不存在 public List<LoanDetailsBean> getLoanDe

我正在尝试编写一个方法来检索数据库中的一行。大约有50%的时间,这一行将不存在。我尝试使用jdbcTemplate.queryForObject,但如果该行在数据库中不存在,则会引发异常。我认为尝试用这种方法是不好的

我了解到,如果您的数据可能为空,那么jdbcTemplate.query是一个更好的选择。但我只有返回一个列表才能让它工作。返回列表在这里没有意义,因为我只选择了一行,这可能存在,也可能不存在

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)的公共方法中。是否可以编写一个调用提供的解决方案并返回第一个元素的方法?如果列表中有多个元素,您的方法将抛出异常。