Я использую Spring JdbcTemplate и застрял в точке, где у меня есть запрос, который обновляет столбец, который на самом деле является массивом типа int. База данных postgres 8.3.7.
Это код, который я использую:
public int setUsersArray(int idUser, int idDevice, Collection<Integer> ids) {
int update = -666;
int[] tipi = new int[3];
tipi[0] = java.sql.Types.INTEGER;
tipi[1] = java.sql.Types.INTEGER;
tipi[2] = java.sql.Types.ARRAY;
try {
update = this.jdbcTemplate.update(setUsersArrayQuery, new Object[] {
ids, idUser, idDevice }, tipi);
} catch (Exception e) {
e.printStackTrace();
}
return update;
}
Запрос: «обновить имя таблицы set array_column =? Где id_user =? И id_device =?».
Я получаю это исключение:
org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [обновить acotel_msp.users_mau set denied_sub_client =? где id_users =? и id_mau =?]; Индекс столбца находится вне диапазона: 4, количество столбцов: 3 .; вложенное исключение: org.postgresql.util.PSQLException: индекс столбца выходит за пределы диапазона: 4, количество столбцов: 3.
Причина: org.postgresql.util.PSQLException: индекс столбца находится вне диапазона: 4, количество столбцов: 3.
Я изучил шаблоны документов jdbc, но я не могу найти никакой помощи, я буду продолжать искать, в любом случае, кто-то может указать мне правильное направление? Спасибо!
РЕДАКТИРОВАТЬ:
Очевидно, что заказ был неправильным, моя вина ...
Я попробовал оба ваших решения, в первом случае у меня было это:
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; плохая грамматика SQL [обновить набор пользователей где id_users =? и id_device =?]; вложенное исключение: org.postgresql.util.PSQLException: невозможно привести экземпляр java.util.ArrayList к типу Types.ARRAY
Пробуя второе решение, у меня было это:
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; плохая грамматика SQL [обновить набор пользователей где id_users =? и id_device =?]; Вложенное исключение - org.postgresql.util.PSQLException: Невозможно привести экземпляр [Ljava.lang.Object; набрать Types.ARRAY
Полагаю, мне нужен экземпляр java.sql.Array, но как мне его создать, используя JdbcTemplate?