El número de filas afectadas por SQL de actualización puede ser devuelto utilizando% ROWCOUNT de SQL (Oracle) o @@ ROWCOUNT (para el servidor SQL)
Nota: Con el fin de devolver el número de filas actualizadas, eliminado etc .. tenemos que utilizar OUT Parámetro de procedimiento almacenado que almacenará el número de filas actualizadas, etc .. borra
para obtener el número de filas actualizado, eliminado etc .. tenemos que utilizar registerOutParameter método en Java
Para almacenar el número de filas actualizadas o eliminadas, etc. en uno de los parámetros OUT en el procedimiento almacenado, debemos establecer el tipo de ese parámetro en nuestro script antes de ejecutar el comando. (En caso de actualizar o borrar va a ser numérico)
Una vez ejecutado el comando, almacenar el valor de actualizados o eliminados filas en la variable (Puede ser nueva variable o variables de disponibles en clase, etc. .) llamando el índice de dicho parámetro (por ejemplo: a = cs.getInt (3) si el parámetro OUT en procedimiento almacenado es segundo parámetro)
Ahora, la variable tiene el valor de Actualización o eliminado filas (ieA = 10)
Ejemplo para porcedure almacenados
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;
Ejemplo para 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() no devuelve el número de filas actualizadas o suprimidas.Simplemente devuelve 0 o 1.
- 0 - Ejecución Error
- 1 - Ejecución éxito
preciosas :) Gracias chicos –
En realidad, yo estoy teniendo un problema con esto. Cuando ejecuto una actualización para una columna con el valor X y trato de actualizarla a X, una consulta en bruto mysql devuelve 0 como filas afectadas, pero la declaración preparada de Java devuelve los números de las filas, incluso si X nunca cambió. –
No es realmente la cantidad de registros actualizados, es la cantidad de registros coincidentes, lamentablemente. En mi configuración (MySQL), obtengo 1 para el valor de retorno de executeUpdate() cuando actualizo un valor con el mismo valor pero cuando ejecuto la consulta manualmente en Workbench, dice: 0 fila (s) afectadas Filas coincidentes: 1 cambiado : 0 Advertencias: 0 – mikato