[英]Java - MySQL-StoredProcedure not executed
我从java类中调用了一些存储过程。 这些存储过程中只有一个似乎没有被调用,但是没有引发异常。 存储过程如下所示:
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
运行查询的Java代码如下所示:
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);
}
}
该代码无例外地执行。 当我通过HeidiSQL调用存储过程时,它可以正常工作。 那么为什么不通过CallableStatement执行存储过程呢? 我现在真的很绝望。
我找到了解决方法。 在通过select语句设置值之前,我在存储过程中声明了变量。 这可行。
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.