Я получаю исключение по обновлению Postgres: org.postgresql.util.PSQLException: Невозможно определить тип SQL ...Postgresql обновление - Использование ArrayList
Вот код, где я строю оператор SQL динамически и добавить Титулы:
public Boolean update(UserData usrData){
String sqlUpdateUser = "UPDATE \"USER\" ";
String sqlSetValues = "SET";
String sqlCondition = "Where \"USER_ID\" = ? ";
List<Object> params = new ArrayList<Object>();
List<Integer> types = new ArrayList<Integer>();
if(usrData.getFirstName() != null){
sqlSetValues = sqlSetValues.concat(" \"FIRST_NAME\" = ? ").concat(", ");
params.add(usrData.getFirstName());
types.add(Types.VARCHAR);
}
if(usrData.getMiddleName() != null){
sqlSetValues = sqlSetValues.concat("\"MIDDLE_NAME\" = ? ");
params.add(usrData.getMiddleName());
types.add(Types.VARCHAR);
}
params.add(usrData.getUserId());
types.add(Types.BIGINT);
Object[] updateParams = new Object[params.size()];
updateParams = params.toArray(updateParams);
Integer[] paramTypes = new Integer[types.size()];
paramTypes = types.toArray(paramTypes);
sqlUpdateUser = sqlUpdateUser.concat(sqlSetValues).concat(sqlCondition);
int rowsAffected = this.jdbcTemplate.update(sqlUpdateUser, updateParams, paramTypes);
if(rowsAffected > 0){
return Boolean.TRUE;
}else{
return Boolean.FALSE;
}
}
и схема таблицы для таблицы USER является:
"FIRST_NAME" character varying(50),
"MIDDLE_NAME" character varying(50),
Если я сделать обновление статический без использования коллекции , но, используя Array, я не вижу проблемы. кода пропущено с использованием массивов:
Object[] param = { usrData.getFirstName(), usrData.getMiddleName(), usrData.getUserId() };
int[] type = { Types.VARCHAR, Types.VARCHAR, Types.BIGINT };
int rowsAffected = this.jdbcTemplate.update(sqlUpdateUser, param, type);
ли я что-то отсутствует?
Благодаря K
Извините, это не помогло! ... любые другие указатели? – Kiran
Можете ли вы проверить точные значения sqlUpdateUser, updateParams, paramTyoes, передаваемых в этой строке - int rowsAffected = this.jdbcTemplate.update (sqlUpdateUser, updateParams, paramTypes); –
Я проверил их - UpdateParams значение: n_update4 | G_update4 | 66 & Соответствующие значения ParamTypes 12 | 12 | -5 .. И эти значения такие же, когда они передаются как нормальный массив, и когда они передаются как массив, созданный из ArrayList ..... Так что с этими проблемами я зациклился на том, как мне динамически построить оператор Update. – Kiran