このメソッドでブール値を返したい:
public Boolean isSizeOk(String transactionId){
String sqlQuery = "SELECT true FROM customer_pool WHERE id = "+ transactionID + " AND level = 13)";
//The next line is the problem.
//If I am returning a Boolean List, I can write
List <Boolean> sizeResult = jdbcTemplate.queryForList(sqlQuery, Boolean.class, transactionId);
//But since I only want a boolean value, what will the statement be?
Boolean sizeResult = jdbcTemplate......?
return sizeResult;
}
親切に助けてください。ありがとう。
レコードがデータベースに存在することを確認するメソッドを作成する場合は、次のコードを使用できます。
Integer cnt = jdbcTemplate.queryForObject(
"SELECT count(*) FROM customer_pool WHERE id = ? AND level = 13)", Integer.class, id);
return cnt != null && cnt > 0
結果の空でないことについての単純な情報を取得するためだけにSQLで行をカウントすることは不必要なやり過ぎかもしれません。結果セットに最初の行を要求して終了するだけです。主キーまたはその他のインデックスによる単純なクエリの場合、パフォーマンスは同様になる可能性がありますが、複雑なクエリ、または全表スキャンクエリの場合は遅くなる可能性があります。春に私は単純なユーティリティメソッドを好む
public boolean exists(String sql, Object... args) {
boolean result = query(sql, args, new ResultSetExtractor<Boolean>() {
@Override
public Boolean extractData(ResultSet rs) throws SQLException,DataAccessException {
boolean result = rs.next();
return result;
}
});
return result;
}
(詳細については、Googleの「sql exists vs count」を参照してください。)
どうですか
// Change query accordingly
String query = "SELECT 1 FROM " + tableName + " WHERE " + idColumnName + " = ? LIMIT 1";
try {
jdbcTemplate.queryForObject(query, new Object[]{id}, Long.class);
return true;
} catch (EmptyResultDataAccessException e) {
return false;
}
ケース1:ブール値を返す場合:sizeResultリストのsizeを確認します。サイズがより大きい場合は--- return trueそれ以外はfalseを返します。
ケース2:ブールリストを返す場合、戻り値の型はブールリストでなければなりません。メソッドは次のように記述する必要があります。
public List<Boolean> isSizeOk(String transactionId, int sizeLimit){
String sqlQuery = "SELECT true FROM customer_pool WHERE id = ? AND level = 13)";
List <Boolean> sizeResult = jdbcTemplate.queryForList(sqlQuery, Boolean.class, transactionId);
Boolean sizeResult = jdbcTemplate......?
return sizeResult;
}