Java - MySQL-StoredProcedure no ejecutado

Llamo a algunos procedimientos almacenados desde mi clase Java. Parece que solo uno de estos procedimientos almacenados no se llama, pero no se lanza ninguna excepción. El procedimiento almacenado se ve así:

CREATE PROCEDURE `insertLoggingMessage` (IN userName VARCHAR(50), IN softwareId   VARCHAR(100), IN operationName VARCHAR(100), IN msg VARCHAR(1000), IN lvl VARCHAR(10))

BEGIN
    SELECT id INTO @userId FROM benutzer WHERE name = userName;
    INSERT INTO logging (benutzer_id, software_id, operation_name, message, level)
    VALUES (@userId, softwareId, operationName, msg, lvl);
END

El código Java, que ejecuta la consulta, se ve así:

private void logToDatabase(Authentication auth, String operationName, String message, LoggingLevel level) {
  String software = getSoftwareId(auth);
  String query = "CALL insertLoggingMessage(?, ?, ?, ?, ?)";
  try {
    connect(this.dataSource);
    CallableStatement statement = this.conn.prepareCall(query);
    statement.setString(1, auth.getUserName());
    setNullableStringParameter(statement, software, 2);
    statement.setString(3, operationName);
    setNullableStringParameter(statement, message, 4);
    statement.setString(5, level.name());
    statement.execute();
    disconnect();
  } catch (Exception exc) {
    logToFile(auth, "logToDatabase", exc, level);
  }
}

El código se ejecuta sin excepción. Cuando llamo al procedimiento almacenado a través de HeidiSQL, funciona bien. Entonces, ¿por qué el procedimiento almacenado no se ejecuta a través de CallableStatement? Estoy realmente desesperado ahora.

preguntado Oct 07 '14, 14:10

1 Respuestas

Encontré una solución. Declaré la variable en el procedimiento almacenado antes de establecer el valor a través de la declaración de selección. Esto funciona.

DECLARE userId INT(10);
SELECT id INTO userId FROM benutzer WHERE name = userName;
INSERT INTO logging (benutzer_id, software_id, operation_name, message, level)
VALUES (userId, softwareId, operationName, msg, lvl);

Respondido 08 Oct 14, 06:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.