2013-03-18 9 views
5

ho una query come segue ...Trovare wheather la query mysql eseguito un aggiornamento o inserire

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

Che ho ottenuto attraverso,

Creazione di una connessione, dichiarazione & l'esecuzione della query come segue

statement.execute(query); 

Ma, ora ho bisogno di trovare se il codice aveva eseguito un INSERT o UPDATE?

Qualcuno può aiutarmi con questo ??

Grazie in anticipo ...

risposta

1

Non conosco alcuna funzione incorporata specifica o non funziona.

Ma nel mio caso mi sarei reso possibile come questo in modo semplice

select count(*) as oldcount from MYTABLE; 

eseguire la query a questo livello

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

Grazie per il suggerimento bro ... Ma io non voglio usare le successive chiamate a DB. Perché nell'esempio precedente vengono utilizzate 3 chiamate a DB. Caricherò per un minimo di 2000 righe fino a un massimo di 100000 righe. Quindi, penso che non sarà fattibile (per il mio problema). Grazie ancora :) – sridhar

2

si potrebbe utilizzare invece due affermazioni: executeUpdate restituisce il numero di righe interessate. Se quel numero è 0, allora devi eseguire un inserto.

+2

Dal [documentazione] (http: // dev .mysql.com/doc/refman/5.5/it/insert-on-duplicate.html) Con ON DUPLICATE KEY UPDATE, il valore delle righe interessate per riga è 1 se la riga è inserita come una nuova riga e 2 se una riga esistente viene aggiornata. – NilsH

+0

Sì, ma il metodo execute() restituisce solo un valore booleano: nessuna informazione su ciò che sridhar desidera sapere. –

+0

Cosa succede se la query è l'operazione 'DELETE'? Non restituisce anche 0? Perché nella documentazione, dice il metodo 'executeUpdate()' return [o (1) il conteggio delle righe per le istruzioni DML (SQL Data Manipulation Language) o (2) 0 per le istruzioni SQL che non restituiscono nulla] (http: // docs. oracle.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29) –

Problemi correlati