我正在尝试使用JDBC模板更新postgresql中的字符变化列。我现在使用的方法就像:
String id=getId();
String duser=getUser();
//if count is 0
if(count!=0){
final String SQlString="update public.user set id=array_append(id,?) where username= ?;
jdbcTemplate.update(SQlString,new PreparedStatementSetter() {
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setString(1, id);
preparedStatement.setString(1, duser);
}
});
}
//count not equal to zero
else
{
final String SQlString="update public.user set id = ? where username=?;
jdbcTemplate.update(SQlString,new PreparedStatementSetter() {
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setString(1,"'{"+id+"}'");
preparedStatement.setString(1, duser);
}
});
所以基本上如果count为0,那么我已经添加了id,如果没有,那么我将附加现有元素的数组。但这会抛出
BADSQL表达式列id是字符变化[]但表达式是 性格变化
但是我知道它是一个字符串但是如何将它设置为postgresql数组类型(不作为字符串数组)。感谢任何帮助。
答案 0 :(得分:1)
您不能将PreparedStatement.setString()
用于varchar[]
(即数组)列。您需要将setArray()
与包含java.sql.Array
的1个String
一起使用。
Connection con = preparedStatement.getConnection();
Array a = con.createArrayOf("varchar", new Object[] {id});
preparedStatement.setArray(1, a);