2016-05-12 11 views
0

データがMySQLに挿入される前に、以下のコードを使用してチェックしています。しかし、私は私のコードMySQLにデータを挿入しようとするとエラーが発生します

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

    } 

ここ

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) 

以下のようにエラーを取得する編集

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

使用しているとき、あなたはあなたのSQLのWHERE句を置くことができません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 =」と表示されます。(存在しない場合は1を選択してください) INSERT INTO movie_title(title) VALUES(?) "; –

+0

はい、クエリ自体を編集したばかりですが、そのような文字列に置くことはできます。 – PhillipXT

+0

'あなたはSQL構文に誤りがあります。 MySQLのバージョンに対応したマニュアルを参照してください。正しい構文がない場合は、IF NOT EXISTS(SELECT * FROM movie_title WHERE title = '1')の近くで使用してください。INSERT INTO movie_tit 'at line 1' –

関連する問題