如何使用JavaScript字符串数组更新varchar []类型的postgresql列?

时间:2019-05-17 19:31:21

标签: javascript sql json postgresql

我有一个postgresql表,其中包含一列名为“ tags”的数据类型为varchar []。我想使用JavaScript字符串数组更新“标签”列中的值。我的客户端使用Javascript,服务器端使用Java。

如果将列设置为varchar数据类型而不是varchar [],则没有问题,然后在客户端首先将标记解析为单个逗号分隔的字符串。但是,我们更希望该列包含一个数组。

我首先将一个名为person的对象传递给准备sql查询的Java方法。 Person.values包括我的Javascript字符串数组以及其他列的值。其他值是字符串和整数,没有问题。

这是Java方法,它使用person.values对象并创建一个sql查询...

@POST
    @Path("{listid}/{personid}/update")
    public Message updatePerson(@PathParam("listid") int listid, @PathParam("personid") int personid,
            @NotEmpty Map<String, Object> person) {

        StringBuilder buf = new StringBuilder();
        buf.append("update table_");
        buf.append(listid);
        buf.append(" set ");

        boolean first = true;
        for (String col : person.keySet()) {
            if (first) {
                first = false;
            } else {
                buf.append(',');
            }
            buf.append(col);
            buf.append("=?");
        }

        buf.append(" where personid=?");

        ArrayList<Object> args = new ArrayList<>(person.values());
        args.add(new Integer(personid));
        int count = db.sql(buf.toString(), args.toArray()).execute().getRowsAffected();
        if (count <= 0) {
            String err = "Failed to update person with personid: " + personid;
            logger.error(err);
            throw new BadRequestException(err);
        }

        return Message.success("Person updated");
    }

我尝试传递原始的javascript字符串数组。在数组上执行stringify后,我尝试传递JSON数组。

JSON_string = JSON.stringify(javascript_array_of_strings) 

我还尝试解析数组以匹配Postgres文档中列出的语法:https://www.postgresql.org/docs/7.4/arrays.html

if (fieldname == "tags") {
        fieldvalue = JSON.stringify(fieldvalue);
        fieldvalue = fieldvalue.substring(1,fieldvalue.length-1);
        fieldvalue = "{"+fieldvalue+"}";
        }
this.person[fieldname]=fieldvalue;

这是我继续看到的确切错误...

  

org.postgresql.util.PSQLException:错误:列“ tags”的字符类型为> varying [],但表达式的字符类型却有所不同提示:您将需要>重写或强制转换该表达式。位置:72

更新: 进一步看了一下。通过直接在postgres中进行测试,我知道此命令语法成功更新了表中的标签值。 通过直接在postgres中进行测试,我知道此命令语法成功更新了表中的标签值。 更新public.table_53设置标签='{“ tag1”,“ tag2”}'其中personid = 1

我正在研究JS必须将标签数组输出到服务的格式,以便服务输出上述黄色突出显示的语法。

我首先尝试使用JSON数组。 [,]  Java将其作为ArrayList对象读取。

查询导致此错误...

  

org.postgresql.util.PSQLException:无法推断用于java.util.ArrayList实例的SQL类型。将setObject()与显式的Types值一起使用以>指定要使用的类型。   我正在阅读setObject()。

我还尝试将标签输出为'{“”,“”}'。 这是行不通的,因为Java将单引号替换为双引号。

  

org.postgresql.util.PSQLException:错误:列“ tags”的字符类型为> varying [],但表达式的字符类型却有所不同提示:您将需要>重写或强制转换该表达式。位置:63

最后,我再次尝试了相同的操作,但是添加了反斜杠以避开引号。 “ \'{\” tag1 \“,\” tag2 \“} \'” 这也没有用...我认为问题是查询仍然在值周围用双引号引起来。

  

org.postgresql.util.PSQLException:错误:列“ tags”的字符类型为> varying [],但表达式的字符类型却有所不同提示:您将需要>重写或强制转换该表达式。位置:63

0 个答案:

没有答案