JDBCTemplate查找行是否存在

j-m*_*ney 4 spring jdbc jdbctemplate

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

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

问题是我不断得到EmptyResultAccessDataException它,当它不存在所以我更新了代码

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

如果记录存在,那么它会给我带来问题.所以我想我真正的问题是在表格中搜索记录存在的最佳方法是什么,因为我想添加所述记录,如果它没有,如果它没有做任何事情.

Ant*_*iev 10

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

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

最快检查 PostgreSQL 中是否存在行

  • 虽然我很欣赏你为回答问题所做的努力,但你的解决方案并不通用。很多人使用 oracle 、 pirace 、 Miracle 等。他们呢? (2认同)

Ang*_*ata 9

你可以使用这样的东西:

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

安杰洛

  • 如果您只是寻找存在,则无需计算行数。`从表中选择 1,其中电子邮件 = ?LIMIT 1` 会做更少的工作。如果没有匹配,它将提前返回一行或零行。 (2认同)

Reg*_*tos 5

对于这种情况,使用JdbcTemplate 中的查询方法会更好,因为它们允许返回零行(没有 EmptyResultDataAccessException):

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