如何使用JDBC模板更新字符变化数组

时间:2017-09-06 08:06:39

标签: java spring spring-boot jdbc

我正在尝试使用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数组类型(不作为字符串数组)。感谢任何帮助。

1 个答案:

答案 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);