更新postgresql语法错误

时间:2014-07-31 14:41:31

标签: sql postgresql sql-update

我有一个名为test的表,它有4列:

id     INT
v_out  INT
v_in   INT
label  CHARACTER

我尝试使用以下查询更新表格:

String sql = "
update
    test
set
    v_out = temp.outV
    , v_in = temp.inV
    , label = temp.label
from (
        values
            (1,234,235,'[abc]') // these value are read from other places
            ,(2,234,5585,'[def]') //[abc] = object.toString();
    ) as temp (e_id, outV, inV, label)
where
    id = temp.e_id;

当我执行它时,我收到错误: org.postgresql.util.PSQLException:错误:语法错误在或附近" ["

在收到此错误之前,我已经更新了超过3000行。

这是什么原因造成的呢?是因为" ["这个角色? 这是原始表:

create table edges(
 id serial not null primary key,
 vertex_out int, 
 vertex_in int, 
 label character varying(255),
 constraint fk_vertex_out foreign key (vertex_out) references vertices(id) on delete cascade,
 constraint fk_vertex_in foreign key (vertex_in) references vertices(id) on delete cascade
);

1 个答案:

答案 0 :(得分:0)

这里最可能出现的问题是SQL查询中的字符串插值(这是一种非常错误的做法)。

看看这个例子:

  values
      (1,234,235,'[abc]''),
      (2,234,5585,'[def]')

第一个对象名称中的'符号突破了第二行导致ERROR: syntax error at or near "[":的字符串边界。

您可以在互联网上搜索SQL Injection以获取有关此问题的详细信息。