35

テーブルからレコードを選択するベスト プラクティスを知りたいです。Spring JdbcTemplateを使用してテーブルからデータを選択するためのベストプラクティスはどれかを知りたいということから、以下の2つの方法について言及しました。

最初の例

try {
    String sql = "SELECT id FROM tableName WHERE column_name = '" + coulmn value + "'";

    long id = jdbcTemplate.queryForObject(sql, Long.class);
} catch (Exception e) {
    if (log.isDebugEnabled()) {
        log.debug(e);
    }
}

これにより、次の例外がスローされます。

予想される 1 の実際の 0 いいね

テーブルにデータが含まれていない場合。私の友人は、これはデータを選択するためのベスト プラクティスではないと言いました。彼は、下記のコードがデータを選択するための唯一のベスト プラクティスであると提案しました。

2 番目の例

try {
    String countQuery = "SELECT COUNT(id) FROM tableName";

    int count = jdbcTemplate.queryForInt(countQuery);
    if (count > 0) {
        String sql = "SELECT id FROM tableName WHERE column_name = '" + coulmn value + "'";

        long id = jdbcTemplate.queryForObject(sql, Long.class);
    }
} catch (Exception e) {
    if (log.isDebugEnabled()) {
        log.debug(e);
    }
}


正しいものまたは他のベストプラクティスを知りたいと思っています。

4

4 に答える 4

38

間違いなく最初の方法がベスト プラクティスです。2 番目の方法では、実際には 1 回しかヒットしないはずのデータベースに 2 回ヒットするからです。これにより、パフォーマンスの問題が発生する可能性があります。

あなたがする必要があるのは、例外EmptyResultDataAccessExceptionをキャッチしてから null を返すことです。データベースでデータが見つからない場合、Spring JDBC テンプレートはEmptyResultDataAccessException例外をスローします。

コードは次のようになります。

try {
     sql = "SELECT id FROM tableNmae WHERE column_name ='"+ coulmn value+ "'";
     id= jdbcTemplate.queryForObject(sql, Long.class);
} 
catch (EmptyResultDataAccessException e) {
   if(log.isDebugEnabled()){
       log.debug(e);
   }
   return null
}
于 2013-08-29T06:46:58.390 に答える
2

クエリで ifNull を使用するより良い方法なので、null がある場合は 0 を取得します。

sql = "SELECT ifNull(id,0) FROM tableName WHERE column_name ='"+ coulmn value+ "'";

この方法を使用すると、デフォルト 0 として取得できます。それ以外の場合は、ID

于 2016-05-23T11:53:52.117 に答える