2016-05-12 111 views
0

在数据插入MySQL之前,我正在使用下面的代码进行检查。不过,我得到如下错误尝试向MySQL中插入数据时获取错误

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT * FROM movie_title WHERE title = 'ABC')' at line 1 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 

这里我的代码

public void checkAndAdd(String movieTitle) throws Exception { 
     // TODO Auto-generated method stub 
     DatabaseConnection db=new DatabaseConnection(); 
     Connection connect=db.getConnection(); 
     String sql="INSERT INTO movie_title(title) VALUES (?) WHERE NOT EXISTS (SELECT * FROM movie_title WHERE title = ?)"; 
     PreparedStatement ps=connect.prepareStatement(sql); 
     ps.setString(1,movieTitle); 
     ps.setString(2,movieTitle); 
     ps.executeUpdate(); 
     connect.close(); 
     ps.close(); 

    } 

编辑

String sql=" IF NOT EXISTS(SELECT * FROM movie_title WHERE title = ?) INSERT INTO movie_title (title) VALUES (?) "; 
+1

如何找到你的问题:以你在Java中执行SQL,将其复制到MySQL并运行它。当mysql给你一个错误时,调试你的SQL – mmcrae

回答

4

你不能把一个WHERE子句中的SQL当你使用VALUES关键字。尝试这样的事情:

IF NOT EXISTS(SELECT 1 FROM movie_title WHERE title = ?) 
    INSERT INTO movie_title (title) 
    VALUES (?) 

我主要与SQL Server一起工作,所以我不确定这是否对MySQL完全有效,但它会是类似的东西。

好,为MySQL它必须是有一点不同:

INSERT INTO movie_title (title) 
SELECT mt.title 
FROM 
    (SELECT ? title) mt 
WHERE NOT EXISTS (
    SELECT 1 FROM movie_title WHERE title = ?) 
+0

你的意思是'String sql =“IF NOT EXISTS(SELECT 1 FROM movie_title WHERE title =?) INSERT INTO movie_title(title) VALUES(?)”;'? –

+0

是的,我只是编辑查询本身,但你可以把它放在一个像这样的字符串中。 – PhillipXT

+0

'你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在'IF NOT EXISTS(SELECT * FROM movie_title WHERE title ='1')附近使用正确的语法。'在第1行INSERT INTO movie_tit' –

相关问题