2017-02-10 2 views
0

Это функция, которую я имею в настоящее время. Однако он ничего не возвращает.Java-функция boolean, которая возвращается, если данные в базе данных

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

Я пытался это сделать, но не кажется, что это будет работать, Я искал его, и есть много предложений, которые говорят Ф.О. в ResultSet RS с rs.next() Я просто интересно, какой лучший подход для этого типа функции.

Целью этого является проверка, существует ли он, если он это сделает, он будет вызывать обновление (& изменить статус), если нет, он вызовет вставку.

+0

Что ошибка вы получаете в вашем Querry? – Gatusko

+1

Ну, он вернет * что-то *. Что он возвращает и как он отличается от того, что вы хотите? Есть ли ошибки? – Carcigenicate

+0

Пожалуйста, укажите правильный исходный код. Для текущего метода параметры отличаются от тех, которые создают запрос. –

ответ

0

Это было то, что работал для меня в конце концов:

@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

Попробуйте это:

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

Это не решение, так как оператор '&' - это всего лишь двоичный код AND. Проблема SQL сама по себе является проблемой. –

0

Что-то не так с вашим кодом

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

Параметр являются идентификатор пользователя и regionIds, но проходя analystId и область в queryForObject() метод.

1

Если ваш вход представляет собой список идентификаторов, вы должны использовать предложение SQL «IN» и весны 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 Status 500 - обработка запроса не удалась; Вложенное исключение - org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; не классифицировано SQLException USER_REGION_TABLE WHERE STATUS = 1 AND USER_ID = (: analytId) И 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-делает-не-карта-правильно-с-namedparameterjdbctemplate-за –

Смежные вопросы