Il numero di righe interessate da SQL Update può essere restituito utilizzando SQL% ROWCOUNT (per Oracle) o @@ ROWCOUNT (per SQL Server)
Nota: Al fine di restituire il numero di righe aggiornate, cancellati, ecc .. dobbiamo usare OUT Parametro in stored procedure che memorizzare il numero di righe aggiornate, cancellato ecc ..
per ottenere il numero di righe aggiornate, eliminate ecc .. dobbiamo usare registerOutParameter metodo in Java
Per memorizzare il numero di righe aggiornate o cancellate ecc. In uno dei parametri OUT nella stored procedure, dobbiamo impostare il tipo di quel parametro nel nostro script prima di eseguire il comando. (In caso di aggiornare o cancellare sarà numerico)
Una volta che il comando viene eseguito, memorizzare il valore di aggiornamento o la cancellazione righe nella variabile (può essere nuovo variabile o variabili disponibili in classe etc. .) chiamando l'indice di quel parametro (es: a = cs.getInt (3) se il parametro OUT nella stored procedure è 2 ° parametro)
Ora, la variabile ha il valore di aggiornamento o eliminato righe (ieA = 10)
Esempio per porcedure memorizzato
Function demo(A varchar2(10), B OUT NUMBER)RETURN NUMBER IS EXIST_LP NUMBER;
BEGIN
UPDATE demo_temp SET name=A where name="ABC";
B:=SQL%ROWCOUNT -- total number of rows updated
RETRUN EXIST_LP;
END demo;
Esempio di java script
public void update(demo demo){
int rowCount = 0;
Connection conn = null;
CallableStatement cs = null;
try{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("your data source path");
conn = ds.getConnection();
cs = conn.prepareCall("BEGIN ? :=demo_dbp.demo(?,?)); END;"); // stored proc
cs.registerOutParameter(1, Types.INTEGER);
cs.setString(2, "XYZ");
cs.registerOutParameter(3, Types.NUMERIC);
rowCount=cs.execcuteUpdate();
demo.setUpdateCount(cs.getInt(3));
} catch (SQLException exc) {
throw new DaoException("An SQL Exception has occurred.", exc);
} catch (NamingException ne) {
throw new DaoException("A Naming Exception has occurred.", ne);
} catch (Exception e) {
throw new DaoException("An Exception has occurred", e);
} finally {
try {
if (cs != null) {
cs.close();
}
} catch (SQLException ex1) {
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
}
}
}
Nota: executeUpdate() non restituisce il numero di righe aggiornate o cancellati.Restituisce solo 0 o 1.
- 0 - Esecuzione non riuscita
- 1 - Esecuzione Successo
Amabili :) Grazie ragazzi –
In realtà io sto avendo un problema con questo. Quando eseguo un aggiornamento per una colonna con valore X e cerco di aggiornarlo a X di una query mysql non elaborata restituisce 0 come righe interessate MA L'istruzione java preparata restituisce il numero di righe anche se X non è mai stato modificato. –
In realtà non è il numero di record aggiornati, ma sfortunatamente è il numero di record corrispondenti. Nella mia configurazione (MySQL), ottengo 1 per il valore di ritorno di executeUpdate() quando aggiorno un valore allo stesso valore ma quando eseguo manualmente la query in Workbench, si dice: 0 riga (e) interessata Righe corrispondenti: 1 Modificato : 0 Avvisi: 0 – mikato