将表单数据存入MySQL数据库时触发java.sql.SQLSyntaxErrorException语法错误的排查求助
解决MySQL SQL语法错误(关键字冲突)
你的问题根源很明确:groups是MySQL的保留关键字,直接在SQL语句里作为字段名使用会触发语法错误。从报错信息里也能看到,错误正好出现在groups这个位置。
具体修改方案
把你的SQL插入语句中的groups字段用反引号(`)包裹起来,修改后的SQL应该是这样:
insert = conn.prepareStatement("INSERT INTO session(subcode,subject,lecturers,tags,`groups`,stdcount,hours)VALUES(?,?,?,?,?,?,?)");
为什么会报错?
MySQL有一系列保留关键字(比如groups、user、order等),这些词被数据库系统用作语法的一部分,不能直接作为标识符(表名、字段名)使用。如果一定要用这些词作为字段名,必须用反引号将其包裹,告诉数据库这是一个标识符而非关键字。
额外小提示
虽然你的参数设置顺序看起来是正确的(已经对应了每个占位符的位置),但建议尽量按占位符的顺序依次设置参数,这样后续维护代码时更不容易出错。比如可以调整成:
insert.setString(1, code); insert.setString(2, subName); insert.setString(3, lecturersList.toString().replace("]", " ")); insert.setString(4, tag); insert.setString(5, grpId); insert.setString(6, stdQty); insert.setString(7, durations);
这样代码的可读性会更好,也能避免不小心搞混参数顺序的问题。
内容的提问来源于stack exchange,提问作者Gayath Chandula
相关产品推荐
相关产品推荐

