2016-11-30 19 views
0

WHIT NOT EXISTSを挿入するためにprepared statementを使用しています。私はさまざまな方法で試してみましたが、単純に機能しません。私のコードはjava.sql.SQLException:クエリの準備中にエラーが発生しました:テーブルが使用されていません

java.sql.SQLException: Error preparing query: No tables used

ある 私はcatch (SQLException sqle)でキャッチエラーがされています。私はまた試してみました

Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Error preparing query: No tables used

:私はこのエラーを印刷MariaDBを、使用してい

try { 
         //hacer los inserts 
         sql = "INSERT INTO calendario (year, mes, dia, date) " 
           + "SELECT * FROM (SELECT ? as year,? as mes ,? as dia,? as date) AS tmp " 
           + "WHERE NOT EXISTS (SELECT * FROM calendario WHERE " 
           + "year=? AND mes=? AND dia=?)"; 

         injerto = conn.prepareStatement(sql); 
         injerto.setInt(1, year); 
         injerto.setInt(2, mes); 
         injerto.setInt(3, dia); 
         injerto.setDate(4, sqldate); 
         injerto.setInt(5, year); 
         injerto.setInt(6, mes); 
         injerto.setInt(7, dia); 
         injerto.addBatch(); 
         injerto.executeBatch(); 

        } catch (SQLException sqle) { 
         sqle.printStackTrace(); 
         System.out.println("Calendario dice: me muero"); 
         System.exit(0); 
        } 

sql = "INSERT INTO calendario (year, mes, dia, date) " 
            + "SELECT ?,?,?,? " 
            + "WHERE NOT EXISTS (" 
            + "SELECT * FROM calendario " 
            + "WHERE year = ? AND mes = ? AND dia = ?)"; 

エラーの変更:

お願いします。

+0

selectにはfrom節がありません。 – NineBerry

+3

"INSERT INTO calendario(year、mes、dia、date)" + "VALUES(?、?、?、?)" + "存在しない場所(SELECT *からcalendario WHERE" + " =?AND mes =?AND dia =?) "' –

+1

あなたは、データスキーマとフィールド名にスペイン語または英語の完全版を使用します。 – Hackerman

答えて

1

は両方SELECTsを取り除く、INSERT IGNOREINSERTを回す:

INSERT IGNORE INTO calendario (year, mes, dia, date) 
    VALUES 
    (?, ?, ?, ?) 

が存在しない場合は、新しい行を挿入します。 そして、「無視する」ことがわかるように、UNIQUE(year, mes, dia)を追加します。

関連する問題