JDBCTemplate查找行是否存在

时间:2018-06-22 14:14:35

标签: spring jdbc jdbctemplate

我很好奇我应该如何使用springs jdbctemplate类确定我的一个表中是否已存在记录或行?我尝试过

int count = jdbcTemplate.queryForObject("select * from MyTable
                                  where Param = ?", new Object[] {myParam},
                                  Integer.class);
if(count ==0)
    //record does not exist

问题是,尽管我不停地得到EmptyResultAccessDataException之一,所以我将代码更新为

try{
    jdbcTemplate.queryForObject("select * from MyTable
                                  where Param = ?", new Object[] {myParam},
                                  Integer.class);
} catch(EmptyResultAccessDataException e) {//insert the record}

如果记录确实存在,这将给我带来问题。因此,我想我的真正问题是,在表中搜索记录是否存在的最佳方法是什么,因为我想添加所述记录,如果不添加,则不执行任何操作。

3 个答案:

答案 0 :(得分:7)

您可以使用以下内容:

String sql = "SELECT count(*) FROM MyTable WHERE Param = ?";
boolean exists = false;
int count = getJdbcTemplate().queryForObject(sql, new Object[] { "paramValue" }, Integer.class);
exists = count > 0;

天使

答案 1 :(得分:3)

在这种情况下,使用 JdbcTemplate 中的 query 方法更好,因为它们允许返回零行(没有EmptyResultDataAccessException):

boolean hasRecord =
  jdbcTemplate
    .query("select 1 from MyTable where Param = ?",
      new Object[] { myParam },
      (ResultSet rs) -> {
        if (rs.next()) {
          return true;
        }
        return false;
      }
    );

答案 2 :(得分:0)

如果数据库支持存在(例如Postgres),则最好使用它:

String query = "SELECT EXISTS(SELECT * FROM table_name WHERE ...)";
boolean exists = jdbcTemplate.queryForObject(query, params, Boolean.class);

Fastest check if row exists in PostgreSQL