2016-05-12 85 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' –

相關問題