2014-06-14 12 views
10

Tôi có thể sử dụng queryForMap nếu có nhiều hàng được truy vấn trả về hay không.JDBCTemplate queryForMap để truy xuất nhiều hàng

Đối với một hàng, mã bên dưới hoạt động tốt.

public Map<String, Object> retrieveMultipleRowsColumns(String deptName){ 
    return jdbcTemplate.queryForMap("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName); 
} 

Cách sửa đổi điều này cho nhiều hàng?

+0

Bạn đang sử dụng cơ sở dữ liệu nào? –

+0

Tôi đang sử dụng Oracle 10g; là nó phụ thuộc vào cơ sở dữ liệu? – user182944

Trả lời

12

Sử dụng queryForListsee the javadoc for full details. Nó trả List<Map<String,Object>>

public List<Map<String, Object>> retrieveMultipleRowsColumns(String deptName){ 
    return jdbcTemplate.queryForList("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName); 
} 
+4

Một danh sách các bản đồ không phải là rất hữu ích. –

+1

Không đúng, danh sách bản đồ có thể rất hữu ích tùy theo ngữ cảnh. –

-2
public <T> List<T> queryForList(String sql, 
          Class<T> elementType, 
          Object... args) 
       throws DataAccessException 

Mô tả sao chép từ giao diện: JdbcOperations Query SQL được để tạo ra một tuyên bố sẵn sàng từ SQL và một danh sách các đối số để ràng buộc với truy vấn, chờ đợi một danh sách kết quả. Kết quả sẽ được ánh xạ tới một Danh sách (một mục nhập cho mỗi hàng) của các đối tượng kết quả, mỗi kết quả phù hợp với loại phần tử được chỉ định.

rõ bởi: queryForList trong JdbcOperations giao diện, Parameters:sql - truy vấn SQL để thực hiện elementType - loại theo yêu cầu của phần tử trong danh sách kết quả (ví dụ, Integer.class) args - lập luận để ràng buộc với truy vấn (để lại nó để PreparedStatement để đoán kiểu SQL tương ứng); cũng có thể contain SqlParameterValue đối tượng không chỉ cho biết giá trị đối số mà còn là kiểu SQL và tùy chọn quy mô Trả về: Danh sách đối tượng khớp với loại phần tử được chỉ định Ném: DataAccessException - nếu truy vấn không thành côngXem thêm: JdbcOperations.queryForList (String, Class) , SingleColumnRowMapper

15

Tôi biết điều này thực sự cũ, nhưng có một cách đơn giản hơn nhiều để thực hiện việc này nếu bạn đang tìm kiếm bản đồ.

Chỉ cần triển khai giao diện ResultSetExtractor để xác định loại bạn muốn trả về. Dưới đây là một ví dụ về cách sử dụng này. Bạn sẽ được lập bản đồ theo cách thủ công, nhưng đối với một bản đồ đơn giản, nó phải đơn giản.

jdbcTemplate.query("select string1,string2 from table where x=1", new ResultSetExtractor<Map>(){ 
    @Override 
    public Map extractData(ResultSet rs) throws SQLException,DataAccessException { 
     HashMap<String,String> mapRet= new HashMap<String,String>(); 
     while(rs.next()){ 
      mapRet.put(rs.getString("string1"),rs.getString("string2")); 
     } 
     return mapRet; 
    } 
}); 

Điều này sẽ cung cấp cho bạn kiểu trả về Bản đồ có nhiều hàng (tuy nhiên nhiều truy vấn của bạn đã trả lại) và không phải là danh sách Bản đồ. Bạn có thể xem tài liệu ResultSetExtractor tại đây: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/ResultSetExtractor.html

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