2014-04-04 20 views
8

Tôi muốn trả về một giá trị boolean sử dụng trong phương pháp này:trả về một boolean - JdbcTemplate

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; 
} 

giúp đỡ Vui lòng. Cảm ơn.

+0

Cảm ơn rất nhiều ... các giải pháp của bạn đều đúng. Bây giờ tôi không biết ai sẽ trả lời đúng cho :). Tôi đánh giá cao sự giúp đỡ của bạn! – bdfios

Trả lời

16

Nếu bạn muốn viết một phương pháp mà kiểm tra rằng một kỷ lục tồn tại trong cơ sở dữ liệu, bạn có thể sử dụng đoạn mã sau:

Integer cnt = jdbcTemplate.queryForObject(
    "SELECT count(*) FROM customer_pool WHERE id = ? AND level = 13)", Integer.class, id); 
return cnt != null && cnt > 0 
+0

Ok điều này có vẻ ổn. Nhưng điều gì sẽ trở lại nếu hồ sơ không tồn tại? – bdfios

+0

truy vấn sẽ trả về 0 và "cnt! = Null && cnt> 0" sẽ trả về false – kostya

+0

ở đâu? được giải quyết? – orbfish

0

Trường hợp 1: Trong trường hợp bạn đang trở về boolean: Chỉ cần kiểm tra kích thước của sizeResult List, nếu kích thước lớn hơn trở đúng khác trở sai.

Trường hợp 2: Nếu bạn đang trở lại danh sách boolean sau đó trở về loại phải đạt được một List.You boolean phải viết phương pháp như:

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; 

}

+0

Cảm ơn Akash. Có, nó thực sự hoạt động khi tôi trả về giá trị như một danh sách boolean, nhưng không có lý do trả lại nó như là một danh sách vì tôi biết rằng câu trả lời tôi muốn là TRUE hoặc FALSE. Đó là lý do tại sao tôi muốn một cách thích hợp để trả lại nó như là boolean, không phải là danh sách boolean. – bdfios

+0

Sau đó, bạn có thể sử dụng giải pháp Case 1. –

4

gì về

012.
// 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; 
} 
4

Đếm các hàng trong SQL chỉ để lấy thông tin đơn giản về không trống của kết quả có thể là quá mức cần thiết, bạn chỉ muốn đặt kết quả cho hàng đầu tiên và kết thúc. Đối với các truy vấn đơn giản bằng khóa chính hoặc chỉ mục khác, hiệu suất có thể tương tự, tuy nhiên, đối với các truy vấn phức tạp hoặc các truy vấn quét toàn bộ bảng có thể chậm. Trong mùa xuân tôi thích phương pháp hữu ích đơn giản

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 tồn tại vs đếm" để biết thêm.)

+1

Tôi nghĩ rằng đó là đề cập đến xứng đáng rằng trong Java 8 này có thể được viết là "return jdbcTemplate.query (searchQuery, args, ResultSet :: next)" –

Các vấn đề liên quan