2017-02-10 5 views
0

이것은 현재 가지고있는 함수입니다. 그러나 아무 것도 반환하지 않습니다. 내가)데이터가 데이터베이스에 존재하는 경우 반환하는 Java 부울 함수

public boolean authenticateDisabledRegions(int analystId, List<Integer> regionIds) { 
    Integer query = jdbcTemplate.queryForObject(
     "select count(*) from ANALYST_REGION_MAPPING WHERE STATUS = 0 AND ANALYST_ID = ? AND REGION_ID = ?", 
     Integer.class, analystId, regionIds); 

    return query != null && query > 0; 
} 

나는이 일을 시도했지만 내가 그것을 찾고있다, 을 작동하지 않는 것와 rs.next와의 ResultSet RS (fo를 말할 제안 많이 있습니다 가장 좋은 접근법이이 유형의 기능에 무엇인지 궁금해하는 것입니다.

존재 여부를 확인하기위한 목적으로 업데이트 (& 상태 변경)를 호출합니다. 그렇지 않으면 삽입을 호출합니다. 사용자 ID와 regionIDs가있는 코드

public boolean doesRegionExist(int userId, List<Integer> regionIds) { 
Integer query = jdbcTemplate.queryForObject("select count(*) from USER_REGION_TABLE WHERE STATUS = 1 AND USER_ID = ? AND REGION_ID = ?", Integer.class, analystId, region); 

     return query != null && query > 0; 
} 

매개 변수에 잘못된

public boolean doesRegionExist(int userId, List<Integer> regionIds) { 
    Integer result = jdbcTemplate.queryForObject("select count(*) from USER_REGION_TABLE WHERE STATUS = 1 AND USER_ID = ? AND REGION_ID = ?", Integer.class, analystId, region); 

      return result != null & result > 0; 
    } 
+0

을 받고 무엇? – Gatusko

+1

음, 그것은 * something *을 반환합니다. 돌아 오는 것은 무엇이며 원하는 것과 다른 점은 무엇입니까? 어떤 오류가 있습니까? – Carcigenicate

+0

정확한 소스 코드를 입력하십시오. 현재의 경우 메서드 매개 변수가 쿼리를 만드는 매개 변수와 다릅니다. –

답변

0

참조 : 당신이 당신의 querry에 오류

@Override 
public boolean doesRegionExist(int userId, List<Integer> regionIds) { 
    HashMap<String, Object> paramMap = new HashMap<String, Object>(); 
    paramMap.put("userId", analystId); 
    paramMap.put("regionIds", regionIds); 

    SqlRowSet result = namedParameterJdbcTemplate.queryForRowSet("SELECT * FROM USER_REGION_TABLE WHERE STATUS = 0 AND USER_ID = (:userId) AND REGION_ID IN (:regionIds)", paramMap); 

     if (result.next()) 
      return true; 
     else 
      return false; 

    } 
0

이 하나를 시도하십시오.

+0

'&'연산자는 이진 AND 일 뿐이니까 해결책이 아닙니다. SQL 쿼리 자체가 문제입니다. –

0

뭔가를하지만의 queryForObject() 메소드에 analystId 및 지역을 통과 :

1

입력 내용이 ID 목록 인 경우 SQL의 "IN"절과 Spring의 NamedParameterJdbcTemplate을 사용해야합니다.

public boolean doesRegionExist(int analystId, List<Integer> regionIds) { 
    MapSqlParameterSource params = new MapSqlParameterSource(); 
    params.addValue("analystId", analystId); 
    params.addValue("regionIds", regionIds); 

    Integer result = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM USER_REGION_TABLE WHERE STATUS = 1 AND USER_ID = :analystId AND REGION_ID IN (:regionIds)", params, Integer.class); 

    return result != null && result > 0; 
} 

또한 결국 나를 위해 일한 것을이이었다 How to execute IN() SQL queries with Spring's JDBCTemplate effectivly?

+0

이 오류가 나타납니다. HTTP 상태 500 - 요청 처리가 실패했습니다. 중첩 예외는 org.springframework.jdbc.UncategorizedSQLException입니다. PreparedStatementCallback; 분류되지 않은 SQLException USER_REGION_TABLE 상태 = 1 AND USER_ID = (: analystId) 및 REGION_ID IN (: regionIds)]; SQL 상태 [99999]; 오류 코드 [17004]; 열 유형이 잘못되었습니다. 중첩 예외가 java.sql.SQLException : 유효하지 않은 열 유형 – user7470849

+0

'addValue'를 사용할 때 매개 변수 유형을 정의해야 할 수도 있습니다 - http://docs.spring.io/spring-framework/docs/2.5.x/api/org /springframework/jdbc/core/namedparam/MapSqlParameterSource.html#addValue(java.lang.String,%20java.lang.Object,%20int,%20java.lang.String) 및 http://stackoverflow.com/questions/22444447/mapsqlparametersource-do-not-map-appropriate-with-namedparameterjdbctemplate-for –