java.sql.SQLException:near";“关于:语法错误

java.sql.SQLException:near";“关于:语法错误,java,sql,sqlite,Java,Sql,Sqlite,嘿,伙计们,我已经搜索了许多其他的答案,但仍然无法解决这个问题 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 =

嘿,伙计们,我已经搜索了许多其他的答案,但仍然无法解决这个问题

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:near”ON:syntax error

更新

最终的代码是这样的

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

Class.forName(“org.sqlite.JDBC”)
可以看出,您使用的是sqlite数据库,它不支持
ON DUPLICATE
子句。这就是您出现此错误的原因


检查问题以找到解决方法。

作为替代方法,我建议这样使用它

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

区别在于,先执行
删除
,然后执行
插入

我使用的是JDBC,当我没有重复键更新viewCount='1')时,它工作得非常好。您应该使用PreparedStatement。您的代码容易受到SQL注入攻击。我将再次尝试使用绑定变量,然后看看如何操作。