2015-12-01 108 views
0

我嘗試填充數據到我的數據庫。但我不希望基於時間的出版物。我不在乎公開出版物,因爲我不會丟失任何數據。 經過漫長的搜索,我終於找到了,你不能使用WHERE NOT EXISTINSERT INTOmysql java preparedstatement插入如果不存在

但現在我得到了下一個問題。我嘗試了這兩種方法,但沒有一種可行。

 /* 
     preparedStatement = connect.prepareStatement("IF NOT EXISTS(SELECT * FROM gpsdata.data where time=?) " 
      + "Begin " 
      + "INSERT INTO gpsdata.data VALUES (default, ?, ? , ?, ?, ?, ?, ?, ?) "+ 
       "END"); 
     */ 
     preparedStatement = connect.prepareStatement("INSERT INTO gpsdata.data VALUES (default, ?, ? , ?, ?, ?, ?, ?, ?) " 
      + "SELECT ? FROM gpsdata.data WHERE NOT EXISTS(SELECT * FROM gpsdata.data where time = ?)"); 

兩者都給了我一些mysql語法錯誤。我無法弄清楚什麼是錯的。我是mysql新手。最後一次嘗試給了我至少一個不同的錯誤:

MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual... ... to use near 'SELECT 1448982118099 WHERE NOT EXISTS(SELECT * FROM gpsdata.data where time =14') at line 1

在檢查dublicates之前,代碼運行良好。所以它應該是新的說法。

問候, 埃裏克

編輯:我不希望我的數據複製到另一臺。

+0

你想將數據移動到其他表嗎? – mokarakaya

+0

綁定變量用於在SQL和客戶端代碼(在您的情況下是Java)之間傳輸數據,而不用於在查詢中傳輸數據。 'INSERT ... SELECT'用於將記錄從一個表複製到另一個表。我認爲這些都不是你想要做的。將「時間」列作爲唯一索引或唯一索引的一部分是否合理? –

+0

@mokarakaya不,我不想那樣做。我只想將新數據插入到我的表格中。但我不想用這些插入創建dublicates – Eric3235963

回答

-1

爲了插入與參數部分與條件一部分,你可以使用從雙選擇連接。 我已經試過以下與Oracle的聲明。

preparedStatement = connect.prepareStatement("INSERT INTO gpsdata.data select 'default', ?, ? , ?, ?, ?, ?, ?, ? from dual 
      WHERE NOT EXISTS(SELECT * FROM gpsdata.data where time = ?)"); 

ps:請注意,您使用兩次時間變量。

+0

這個問題是關於MySQL的。 – EJP

+0

我敢打賭,MySQL是一樣的 – mokarakaya

0

?SELECT ?中不是有效參數。你必須從字面上命名一列。