error en mysql al ejecutar un procedimiento almacenado desde java
estos errores son los que me genera al tratar de ejecutar un procedimineto almacenado en mysql desde java
si hago la consulta directamente en mysql no me genera ningun errror
ya lo probe con una funcion pero lo que hace es trabar el programa que estoy haciendo. si laguien me pudiera ayudar
esta es la funcion que trate de ejecutar en primer lugar
CREATE FUNCTION f_Cambio_nip(P_Numero_Tarjeta VARCHAR(10),
P_Nip_Nuevo INT
)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE V_Realizacion INT;
DECLARE V_Nuevo_Nip INT;
#actializa el nip de la tarjeta ingresada
UPDATE tarjeta
SET
NIP = P_Nip_Nuevo
WHERE
NUM_TARJETA = P_Numero_Tarjeta;
# consulta que al nuevo nip
SET V_Nuevo_Nip = (SELECT nip
FROM
tarjeta
WHERE
NUM_TARJETA = P_Numero_Tarjeta);
#confirma si el nip fue actualizado
SET V_realizacion = if(V_Nuevo_Nip = P_Nip_Nuevo, 1, 0);
#realiza el registro del movimiento en la tabla movimientos
INSERT INTO movimientos VALUES ('', 'Cambio de NIP',
(SELECT curdate()),
(SELECT ID_CUENTA
FROM
tarjeta
WHERE
NUM_TARJETA = P_Numero_Tarjeta),
(SELECT id_tarjeta
FROM
tarjeta
WHERE
NUM_TARJETA = P_Numero_Tarjeta),
'', '6');
RETURN V_Realizacion;
END//
y posteriormente lo probe con uste procedimiento almacenado
CREATE PROCEDURE Cambio_De_NIP(IN P_Numero_Tarjeta VARCHAR(10),
IN P_Nip_Nuevo INT,
OUT P_Confirmacion VARCHAR(20)
)
BEGIN
DECLARE retribucion INT;
SET retribucion = (SELECT f_Cambio_nip2(P_Numero_Tarjeta, P_Nip_Nuevo));
#confirma si el nip fue actualizado
SET P_Confirmacion = if(retribucion = P_Nip_Nuevo, 'Cambio realizado', 'Cambio no realizado');
#realiza el registro del movimiento en la tabla movimientos
INSERT INTO movimientos VALUES ('', 'Cambio de NIP',
(SELECT curdate()),
(SELECT ID_CUENTA
FROM
tarjeta
WHERE
NUM_TARJETA = P_Numero_Tarjeta),
(SELECT id_tarjeta
FROM
tarjeta
WHERE
NUM_TARJETA = P_Numero_Tarjeta),
'', '6');
END
//
pero solo funcionan desde mysql directamente y cuando los mando desde java solo traba el programa y en el caso del procedimiento despues de un cierto tiempo manda el error que se menciona la inicio
- Inicie sesión o regístrese para enviar comentarios
Transaccion
Puede ser que otra transacción este bloqueando al procedimiento.
Y el código Java?
Y el código Java?
if (e.getSource() ==
modelo_cuentas.cambio_nip(Integer.parseInt(valor_newnip.getText())); // donde modelo cuentas es una clase que contiene la instruccion para ejecutar el procedimiento y el valor_newnip.gettext(); es para obtener el valor desde la interfaz y es el valor que le mandare al procedimiento como parametro
}
public void cambio_nip(int nip_nuevo) {
try {
control.ejecutarProcedimientoAlmacenado(parametro);
control.commit();
} catch (SQLException ex) {
System.out.println("imprime el error");
ex.printStackTrace();
Logger.getLogger(clase_modelo_cuentas.class.getName()).log(Level.SEVERE, null, ex);
}
}
por ultimo esto pertenece a control y es donde ejecuta el procedimiento almacenado
ResultSet rows;
Statement s = conexion.createStatement();
System.out.println("C: SQL [ SELECT " + funcion + " AS resultado ]");
rows = s.executeQuery("SELECT " + funcion + " AS resultado");
rows.next();
return rows.getString("resultado");
}
gracias por sus comentarios y espero que me puedan ayudar
y el codigo de
y el codigo de createStatement? y el de ejecutarProcedimientoAlmacenado?