#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]; Преобразование из НЕИЗВЕСТНОГО в НЕИЗВЕСТНОЕ не поддерживается.;