gpt4 book ai didi

Postgresql 更新 - 使用 ArrayList

转载 作者:行者123 更新时间:2023-11-29 13:55:02 25 4
gpt4 key购买 nike

我在更新 postgres 时遇到异常:org.postgresql.util.PSQLException:无法推断 SQL 类型...

这是我动态构建 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),

如果我不使用集合而是使用数组进行静态更新,我看不到任何问题。使用数组截取的代码:

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

最佳答案

移动这些行

    Object[] updateParams = new Object[params.size()];
updateParams = params.toArray(updateParams);

Integer[] paramTypes = new Integer[types.size()];
paramTypes = types.toArray(paramTypes);

在下面

    params.add(usrData.getUserId());
types.add(Types.INTEGER);

在您的情况下,您缺少在 updateParams 中添加 usrData.getUserId()。

关于Postgresql 更新 - 使用 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com