2013-03-18 35 views
5

我有一個查詢,如下所示...尋找wheather MySQL查詢進行更新或插入

INSERT INTO MYTABLE (f1,f2,f3,f4) VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE f4=5; 

,我已經通過實現,

創建連接,語句&執行查詢如下

statement.execute(query); 

但是,現在我需要找到代碼是否執行了INSERT或UPDATE?

任何人都可以幫助我嗎?

在此先感謝...

回答

1

我不知道任何具體內置的功能或工作。

但在我的情況下,我將使它能夠像這樣一個簡單的方法

select count(*) as oldcount from MYTABLE; 

在這個級別

INSERT INTO MYTABLE (f1,f2,f3,f4) VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE f4=5; 

select count(*) as newCount from MYTABLE; 

retrive OLDCOUNT and NEW COUNT 

if(oldcount != new count) 
{ 
    //InsertPerformed 
} 

else 
{ 
    //updateperformed 
} 
+0

感謝您的建議bro ...但我不想使用後續的數據庫調用。因爲上面的例子使用了3個對DB的調用。我將上傳至少2000行,最大行數爲100000行。所以,我認爲這不可行(對我的問題)。再次感謝 :) – sridhar 2013-03-18 14:13:51

2

您可以使用,而不是兩個語句:executeUpdate返回受影響的行數。如果這個數字是0,那麼你必須執行一個插入。

+2

從[文件](HTTP執行您的查詢://開發.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html) 使用ON DUPLICATE KEY UPDATE時,如果該行作爲新行插入,則每行受影響的行值爲1,如果現有的行更新。 – NilsH 2013-03-18 12:07:19

+0

是的,但execute()方法只返回一個布爾值:沒有關於sridhar想知道什麼的信息。 – 2013-03-18 12:09:42

+0

如果查詢是「DELETE」操作,該怎麼辦?它是不是也返回0?因爲在文檔中,executeUpdate()方法返回[1] SQL Data Manipulation Language(DML)語句的行數,或者返回[2] 0(不返回任何內容的SQL語句](http:// docs。 oracle.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29) – 2013-03-18 12:10:47