2013-08-24 53 views
-1

嘿傢伙我已經搜查了許多其他答案,我仍然無法找出這個問題。java.sql.SQLException:「ON」附近:語法錯誤

statement.executeUpdate("CREATE TABLE IF NOT EXISTS recentlyWatched (fileName STRING NOT NULL, fileLocation STRING, viewCount INTEGER, PRIMARY KEY (fileName))"); 

Class.forName("org.sqlite.JDBC"); 
     connection = DriverManager.getConnection("jdbc:sqlite:media.db"); 
     statement = connection.createStatement(); 
     statement.executeUpdate("INSERT INTO recentlyWatched (fileName, fileLocation, viewCount) VALUES ('" 
       + fileName + "', '" 
       + fileLocation + "', 0) ON DUPLICATE KEY UPDATE viewCount = '1'"); 

我已經嘗試了許多方法來解決這個問題,很茫然,每當我試着插入一條記錄,我得到「值java.sql.SQLException:近‘ON’:語法錯誤」。

更新

最終代碼看起來像這樣

statement.executeUpdate("INSERT OR IGNORE INTO recentlyWatched (fileName, fileLocation, viewCount) VALUES ('" 
       + fileName + "', '" 
       + fileLocation + "', 0)"); 
     statement.executeUpdate("UPDATE recentlyWatched SET viewCount = viewCount + 1 WHERE '" + fileName + "' LIKE fileName;"); 
+0

我使用JDBC它完全正常,當我沒有對重複KEY UPDATE viewCount ='1'「)。 – Ash

+0

您應該使用PreparedStatement。您的代碼容易受到SQL注入攻擊。 –

+0

我會再次給它一個綁定變量的註釋,並看看我如何去 – Ash

回答

5

正如人們可以從Class.forName("org.sqlite.JDBC")告訴您正在使用的不支持ON DUPLICATE條款SQLite數據庫。這就是你得到這個錯誤的原因。

檢查this問題的解決方法。

+0

乾杯這工作。 – Ash

1

作爲替代我會建議使用像這樣

("REPLACE INTO recentlyWatched (fileName, fileLocation, viewCount) VALUES ('" 
       + fileName + "', '" 
       + fileLocation + "', 0) 

不同的是,是做了DELETE,然後一個INSERT