2013-03-18 4 views
5

Ich habe eine Abfrage wie folgt ...Finding wheather die mysql-Abfrage eine Aktualisierung durchgeführt oder einfügen

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

, dass ich durch erreicht haben,

eine Verbindung erstellen, Anweisung & Ausführen der Abfrage wie folgt

Aber jetzt muss ich herausfinden, ob der Code ein INSERT oder UPDATE durchgeführt hatte?

Kann mir jemand dabei helfen ??

Vielen Dank im Voraus ...

Antwort

1

Ich kenne keine spezifische eingebaute Funktion oder umgehen.

Aber in meinem Fall würde ich es möglich gemacht hat, wie dies auf einfache Weise

select count(*) as oldcount from MYTABLE; 

Ihre Frage auf dieser Ebene ausführen

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

Danke für den Vorschlag, bro ... Aber ich möchte keine weiteren Aufrufe an die DB verwenden. Weil das obige Beispiel 3 Aufrufe an die DB verwendet. Ich werde für mindestens 2000 Zeilen auf maximal 100000 Zeilen hochladen. Also, ich denke, es wird nicht möglich sein (für mein Problem). Danke noch einmal :) – sridhar

2

Sie könnten stattdessen zwei Anweisungen verwenden: executeUpdate beeinflusst die Anzahl der Zeilen zurückgibt. Wenn diese Zahl 0 ist, müssen Sie eine Einfügung durchführen.

+2

aus der [Dokumentation] (http: // dev .mysql.com/doc/refman/5.5/en/insert-on-duplicate.html) Mit ON DUPLICATE KEY UPDATE ist der betroffene Zeilenwert pro Zeile 1, wenn die Zeile als neue Zeile eingefügt wird, und 2 wenn eine bestehende Zeile aktualisiert wird. – NilsH

+0

Ja, aber die Methode execute() gibt nur einen booleschen Wert zurück: keine Information darüber, was sridhar wissen möchte. –

+0

Was ist, wenn die Abfrage die 'DELETE' Operation ist? Ist es nicht auch 0? Weil in der Dokumentation sagt die 'executeUpdate()' Methode gibt entweder (1) die Anzahl der Zeilen für SQL Data Manipulation Language (DML) -Anweisungen oder (2) 0 für SQL-Anweisungen, die nichts zurückgeben] (http: // docs. oracle.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29) –

Verwandte Themen