首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.sql.SQLException:参数2不是OUT参数

java.sql.SQLException:参数2不是OUT参数
EN

Stack Overflow用户
提问于 2013-10-25 05:44:24
回答 4查看 11K关注 0票数 0

在运行以下代码时,我得到了一个错误:

代码语言:javascript
运行
复制
1. cs = getCon1().prepareCall("{CALL SaveLabourWageDetails(?,?)}");

2. cs.setString(1, user.getUserId());

3. cs.registerOutParameter(2, java.sql.Types.INTEGER); //<--- ERROR at this line

4. cs.execute();

5. String lastIsertId=cs.getString(2);

存储过程是:

代码语言:javascript
运行
复制
CREATE

    PROCEDURE `cheque_alert`.`SaveLabourDetailsHead`(IN wage_entered_by VARCHAR(10),OUT LastInsertId INT)

    BEGIN
    INSERT INTO `cheque_alert`.`labour_wage_head`
            (
             `wage_entered_by`,
             `entered_date_time`)
    VALUES (wage_entered_by,
         NOW());

          SELECT LAST_INSERT_ID() INTO LastInsertId;

    END$$

DELIMITER ;

请指出这个代码中的问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-25 06:09:25

你打错程序了。您有过程SaveLabourDetailsHead,您正在调用

代码语言:javascript
运行
复制
1. cs = getCon1().prepareCall("{CALL SaveLabourWageDetails(?,?)}");  
                                         ↑  

换到,

代码语言:javascript
运行
复制
1. cs = getCon1().prepareCall("{CALL SaveLabourDetailsHead(?)}");  

设置字符串参数wage_entered_by

票数 1
EN

Stack Overflow用户

发布于 2013-10-25 05:52:29

out参数的类型为String,但应该是int。试试这个。

代码语言:javascript
运行
复制
int lastIsertId=cs.getInt(2);
票数 0
EN

Stack Overflow用户

发布于 2020-02-27 11:19:31

我也有同样的问题,但是输出异常具有误导性,因为根本原因是过程名。

我输入了数据库中不存在的不正确的过程。

它没有提供类似于“例程不存在”的SQL异常,而是提供了:

代码语言:javascript
运行
复制
java.sql.SQLException: Parameter number 2 is not an OUT parameter.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19581950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档