2013-05-12 102 views
-1

在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+"')"); 

回答

0

projectUpdate.executeUpdate ('INSERT INTO projectLog(hoursWorked, weyerhaeuserWork,sudokuWork,websiteWork,scriptWork,“+”tropeWork) VALUES('+ +WorkworkToday +'','“+ internWork +”','“+ sudokuWork +”','“+ websiteWork + “','”+ scriptWork +“','”+ tropeWork +“')”);

不知道,但它的工作原理,但你可以尝试。您没有添加'到hoursWorkedToday +

0

你错过了最终报价和hoursWorkedToday之间的加号:

projectUpdate.executeUpdate("INSERT INTO projectLog (hoursWorked, weyerhaeuserWork, sudokuWork,websiteWork, scriptWork," + 
"tropeWork) VALUES (" + hoursWorkedToday +",'"+internWork+"','"+sudokuWork+"', '"+websiteWork+"' ,'"+scriptWork+"' ,'"+tropeWork+"')"); 
--     ^here 
2

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();