我已经知道PostgreSQL 9.5和更新的支持INSERT ... ON CONFLICT UPDATE
,即upsert。虽然,我无法升级我的版本。
所以我在pgAdmin中尝试这个:
do $$
begin
insert into test(id,description,name) values(10,'','road');
exception when unique_violation then
update function set name = 'newRoad',description='yes' where id =10;
end $$;
它有效但当我尝试将其与jdbc模板集成时,我得到:
java.lang.ArrayIndexOutOfBoundsException: null
通过这样做:
sql.append("DO $$ BEGIN INSERT INTO test(id,description,NAME) VALUES(?,?,?)");
sql.append(" exception when unique_violation then UPDATE SET description=?,");
sql.append(" name=? where id=?");
try {
jdbcTemplate.update(sql.toString(), new Object[]{id,description,name,description,name,id});
}
我不知道如何处理带有JDBC模板请求的参数,当'
时会出现异常。