我有一个名为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
);
答案 0 :(得分:0)
这里最可能出现的问题是SQL查询中的字符串插值(这是一种非常错误的做法)。
看看这个例子:
values
(1,234,235,'[abc]''),
(2,234,5585,'[def]')
第一个对象名称中的'
符号突破了第二行导致ERROR: syntax error at or near "[":
的字符串边界。
您可以在互联网上搜索SQL Injection
以获取有关此问题的详细信息。