我有一个名为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
);
最佳答案
这里最可能的问题是SQL查询中的字符串插值(这是一个非常糟糕的实践)。
看看这个例子:
values
(1,234,235,'[abc]''),
(2,234,5585,'[def]')
第一个对象名称中的
'
符号违反字符串边界,导致第二行出现ERROR: syntax error at or near "[":
。您可以在internet上搜索
SQL Injection
,以获取有关此问题的详细信息。关于sql - 用语法错误更新postgresql,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25061815/