2013-05-12 105 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();