Java 在PostgreSQL查询中使用冒号(“:”)是否会导致语句失败?
我试图使用Java 在PostgreSQL查询中使用冒号(“:”)是否会导致语句失败?,java,postgresql,spring-boot,Java,Postgresql,Spring Boot,我试图使用INSERT语句将Spring应用程序前端中的表单中的数据添加到PostgreSQL表中。表单主要包括文本值,但我也包括时间的输入要求,格式为HH:MM。在旁注中,我还要求使用DD/MM/YYYY格式的日期,格式中的文本可以包括逗号、句点和撇号。根据表格中输入的数据(例如姓名、传记、地址等),我得到以下错误,指向数据的不同位置 org.postgresql.util.PSQLException: ERROR: syntax error at or near "blank" Positi
INSERT
语句将Spring应用程序前端中的表单中的数据添加到PostgreSQL表中。表单主要包括文本值,但我也包括时间的输入要求,格式为HH:MM
。在旁注中,我还要求使用DD/MM/YYYY
格式的日期,格式中的文本可以包括逗号、句点和撇号。根据表格中输入的数据(例如姓名、传记、地址等),我得到以下错误,指向数据的不同位置
org.postgresql.util.PSQLException: ERROR: syntax error at or near "blank"
Position: x
因此,我无法精确指出问题的确切根源,但我在这类错误中的任何经历都有一个与某种描述的符号有关的问题
我使用executeUpdate
在java类中创建insert语句,如下所示:
int rs = stmt.executeUpdate( "INSERT INTO events VALUES
(nextval('reviews_id_seq'::regclass), '" + eventname +" '," +description+","
+address+", '"+starttime+"', '"+endtime+"',
'"+username+"','"+attendees+"');");
有什么想法吗?你的陈述没有用单引号括起
描述。您试图插入的实际数据中可能有冒号。正如评论中已经指出的,这是一种非常危险的组合查询的方式。研究如何使用参数化查询,而不是使用字符串构建查询
明确列出要插入的表中的列也是一种很好的做法。根据数据库驱动器的不同,您的查询可能如下所示:
insert into events (name, description, address) values (?, ?, ?);
然后按顺序向数据库驱动程序提供这些值。(见下文)
(1)使用占位符不是更好更安全吗?SQL注入是一件真实的事情。(2) 最好指定列:插入事件(eventname,description,…)值(…)
。(3) 如果指定列名,则不必担心手动将id
设置为下一个序列值,列的默认值应考虑到这一点。