Java - MySQL-StoredProcedure no ejecutado
Frecuentes
Visto 138 equipos
1
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.
1 Respuestas
0
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 java mysql stored-procedures or haz tu propia pregunta.