выберите запрос where в предложении проблема в spring JdbcTemplate

#java #spring #spring-mvc

Вопрос:

открытый класс CountryMasterModel {частная строка countryNames[];

 public String[] getCountryNames() {
    return countryNames;
}

public void setCountryNames(String[] countryNames) {
    this.countryNames = countryNames;
}
 

}

открытый интерфейс CountryMasterService {

 List<String> getCountryData(String compCode, CountryMasterModel model) throws SQLException, DataAccessException;
 

}

@Component общедоступный класс CountryMasterDAO реализует CountryMasterService{

 @Autowired
private JdbcTemplate template;

@Override
public List<String> getCountryData(CountryMasterModel model) throws SQLException, DataAccessException {
    this.template = new JdbcTemplate(DBMSSQL.getDBCon());
    System.out.println(template.getDataSource().getConnection().getCatalog());
    List<String> ids = Arrays.asList(model.getCountryNames());
    MapSqlParameterSource parameters = new MapSqlParameterSource();
    parameters.addValue("countryName", ids);
    List<String> list = new ArrayList<String>();
    list = this.template.query("SELECT NAME FROM country_master WHERE NAME IN (?)", new Object[] { ids },
            new CountryMasterResultSetExtrator());
    System.out.println("ids = "   ids);
    System.out.println("list = "   list.get(0));
    return list;
}

public static void main(String[] args) throws DataAccessException, SQLException {
    CountryMasterModel bean = new CountryMasterModel();
    String a[] = { "India", "Pakistan", "Russia", "America",};
    bean.setCountryNames(a);
    System.out.println(StringUtil.getStringArray(a));
    List<String> list = new CountryMasterDAO().getCountryData(bean);
    System.out.println("List Size = " list.size());
}
 

}

введите описание изображения здесь

Ответ №1:

Проверьте эту строку:

 list = this.template.query(
          "SELECT NAME FROM country_master WHERE NAME IN (?)", 
           new Object[] { ids },
            new CountryMasterResultSetExtrator()
       );
 

NAME IN (?) требуется один параметр и new Object[] { ids } имеет 3 параметра. попробуйте это NAME IN (?,?,?)

проверьте эту ссылку для получения дополнительной информации: https://www.baeldung.com/spring-jdbctemplate-in-list

Комментарии:

1. Тогда появятся динамические данные, как задать вопросительный знак. Для тестирования я взял только три названия стран.

2. вы проверили примеры по ссылке?

3. Да, проверено. Пример приведен в 2.2. не сработало при возникновении исключения.

4. PreparedStatementCallback; исключение SQLException без рубрики для SQL [ВЫБЕРИТЕ ИМЯ ИЗ country_master, ГДЕ ИМЯ В (?)]; Состояние SQL [null];

5. код ошибки [0]; Преобразование из НЕИЗВЕСТНОГО в НЕИЗВЕСТНОЕ не поддерживается.;