CallableStatement setInt命名参数异常

问题描述 投票:0回答:1

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

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

但是setInt()会抛出一个NullPointerException:

NullPointerException

但是,stmt不为null;从第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。

你知道我可能做错了什么吗?

UPDATE

使用Java使用的帐户进行MySQL身份验证

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

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

java mysql jdbc named-parameters callable-statement
1个回答
0
投票

以下是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);

如果要在callablestatement中添加多个命名参数

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);
© www.soinside.com 2019 - 2024. All rights reserved.