使用存储过程执行时,executeUpdate() 不起作用

Posted

技术标签:

【中文标题】使用存储过程执行时,executeUpdate() 不起作用【英文标题】:executeUpdate() is no working while execute using stored procedure 【发布时间】:2020-12-17 00:46:24 【问题描述】:

executeUpdate 返回 1,但未将值插入表中。 'CR_SAVEHBCRPERFORMA' 是插入值的过程。执行else 0后输出参数返回1,这里返回0..(有些代码遗漏了bcoz太长了 )

    Connection con = null;
    CallableStatement cstmt1 = null;
    DataSource ds = null;
    ResultSet rs = null;
    try 
       
        String REGNO = request.getParameter("regNo");
        String CENTERNAME = request.getParameter("center");
        String DIAGNOSISDATE = request.getParameter("firstDiag");
        RccDataSources rccDS = new RccDataSources();
        ds = rccDS.getOncoLiveDS();
        con = ds.getConnection();
        cstmt1 = con.prepareCall("CALL CR_SAVEHBCRPERFORMA(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
        cstmt1.setString(1, REGNO);
        cstmt1.setString(2, CENTERNAME);
        cstmt1.setString(3, DIAGNOSISDATE);
        cstmt1.setString(4, SOURCEREG);
        cstmt1.setString(5, SOURCEREF);
        cstmt1.setString(6, LABNO); 
        cstmt1.setString(7, FIRSTSEENDATE);
        cstmt1.setString(8, EDUCATION);
        cstmt1.setString(28, TREATMENTRITYPE);
        cstmt1.setString(29, STATUSFOLLOWUP);
        cstmt1.setString(30, DISEASESTATUS);
        cstmt1.setString(31, REMARK);
        cstmt1.registerOutParameter(32, Types.INTEGER);
        cstmt1.executeUpdate();
        int x = cstmt1.getInt(32);
  
     

【问题讨论】:

也许你没有提交?见this。 【参考方案1】:

使用

cstmt1.execute();

举例

        stmt.setString(1, doc_number);
        stmt.setString(2, doc_type);
        stmt.setString(3, line_number);
        stmt.registerOutParameter(4, oracle.jdbc.OracleTypes.CURSOR);
        
        stmt.execute();
        cursor = stmt.getCursor(4);

【讨论】:

错误:java.sql.SQLException:ORA-06550:第 1 行,第 7 列:PLS-00306:调用“CR_SAVEHBCRPERFORMA”时参数的数量或类型错误 ORA-06550:第 1 行,列7:PL/SQL:语句被忽略 当您尝试发送错误的参数值编号而不是 varchar 时,通常会出现该错误。

以上是关于使用存储过程执行时,executeUpdate() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

execute(),executeQuery(),executeUpdate()和executeBatch()的使用与区别

10.5 执行SQL语句的方式

java中如何获取oracle存储过程返回的多个值。

oracle 带参数存储过程更新

如何调用存储过程和准备好的声明

我的 executeUpdate() 工作,但没有提交