我有一个名为 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]')
第一个对象名称中的 '
符号违反了字符串边界,导致 错误:第二行“[”:
处或附近的语法错误。
您可以在互联网上搜索SQL Injection
以获取有关此问题的详细信息。
关于sql - 使用语法错误更新 postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25061815/