为什么我得到这个令牌的语法错误?
问题描述:
在JDBC中工作时,尽管它是一个合法变量,并且hoursWorked
是一个列名,但我始终收到hoursWorkedToday
令牌的语法令牌错误。类型也匹配。为什么我得到这个令牌的语法错误?
projectUpdate.executeUpdate("INSERT INTO projectLog (hoursWorked, weyerhaeuserWork, sudokuWork,websiteWork, scriptWork," +
"tropeWork) VALUES ("hoursWorkedToday +",'"+internWork+"','"+sudokuWork+"', '"+websiteWork+"' ,'"+scriptWork+"' ,'"+tropeWork+"')");
获取有关hoursWorkedToday
错误再次,不知道为什么....语法与我已经运行其他查询,例如匹配起来......
workoutUpdate.executeUpdate("INSERT INTO workoutLog (workedOut, milesRan, comments) VALUES (1,"+miles+" ,"+
workoutComments+"')");
答
projectUpdate.executeUpdate ('INSERT INTO projectLog(hoursWorked, weyerhaeuserWork,sudokuWork,websiteWork,scriptWork,“+”tropeWork) VALUES('+ +WorkworkToday +'','“+ internWork +”','“+ sudokuWork +”','“+ websiteWork + “','”+ scriptWork +“','”+ tropeWork +“')”);
不知道,但它的工作原理,但你可以尝试。您没有添加'到hoursWorkedToday +
答
你错过了最终报价和hoursWorkedToday之间的加号:
projectUpdate.executeUpdate("INSERT INTO projectLog (hoursWorked, weyerhaeuserWork, sudokuWork,websiteWork, scriptWork," +
"tropeWork) VALUES (" + hoursWorkedToday +",'"+internWork+"','"+sudokuWork+"', '"+websiteWork+"' ,'"+scriptWork+"' ,'"+tropeWork+"')");
-- ^here
答
VALUES ("hoursWorkedToday
不是语法正确。您错过了+
符号。
我强烈建议您使用PreparedStatement
s,而不是自己组装SQL字符串。 PreparedStatements更快(数据库驱动程序将编译并重新使用它们),更易于使用,并保护您免受SQL注入。
你可以像这样用一个PreparedStatement替换查询:
PreparedStatement p = connection.prepareStatement("INSERT INTO projectLog(hoursWorked, weyerhaeuserWork, sudokuWork,websiteWork, scriptWork, tropeWork) VALUES (?, ?, ?, ?, ?, ?)");
p.setInt(1, hoursWorkedToday);
...
p.execute();