gpt4 book ai didi

java - CallableStatement setInt 命名参数异常

转载 作者:行者123 更新时间:2023-11-29 19:10:01 27 4
gpt4 key购买 nike

我试图通过参数名称调用存储过程:

int processId = 1;
CallableStatement stmt = conn.prepareCall("{call get_process_log_latest(?)}");
stmt.setInt("process_id", processId);

但是 setInt() 抛出 NullPointerException:

NullPointerException

但是,stmt 不为空;该异常是从第 1381 行的 getNamedParamIndex() 方法的第 2065 行的 setInt() 中引发的。

存储过程:

DELIMITER $$
CREATE PROCEDURE `get_process_log_latest`(
IN process_id INT
)
BEGIN
SELECT
id,
start_time,
end_time
FROM process_logs pl
WHERE pl.process_id = process_id
ORDER BY id DESC
LIMIT 1;
END$$
DELIMITER ;

我使用的是 JDK 8、mysql-connector-java-5.1.38 和 MySQL 5.7.12。

你知道我做错了什么吗?

更新

使用 Java 使用的帐户验证 MySQL 并使用

SELECT * FROM information_schema.parameters   
WHERE parameter_name = 'process_id';

确认存储过程的参数名称以及该帐户是否具有元数据权限。

最佳答案

问题是您尝试使用命名参数设置值,但在可调用语句中没有以相同的方式使用。在您的情况下使用操作

使用 CallableStatements 需要遵循以下两件事

操作:

int processId = 1;
CallableStatement stmt = conn.prepareCall("{call get_process_log_latest(?)}");
stmt.setInt(1, processId);

命名参数:

int processId = 1;
CallableStatement stmt = conn.prepareCall("{call get_process_log_latest(:process_id)}");
stmt.setInt("process_id", processId);

如果你想在可调用语句中添加多个命名参数

int processId = 1;
CallableStatement stmt = conn.prepareCall("{call get_process_log_latest(:process_id, :process_name)}");
stmt.setInt("process_id", processId);
stmt.setString("process_name", processName);

关于java - CallableStatement setInt 命名参数异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43163521/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com