参数编号1不是OUT参数

时间:2014-11-21 13:59:50

标签: java sql stored-procedures jdbc parameters

尝试使用JDBC执行存储过程,我似乎无法解决此错误,

  

java.sql.SQLException:参数编号1不是OUT参数

public static void SP1() throws SQLException, IOException {

    try {

        stmt = conn.createStatement();
        stmt.executeUpdate("DROP PROCEDURE IF EXISTS sp1;");

        stmt.executeUpdate("CREATE PROCEDURE sp1(OUT cName VARCHAR(20))"
                + "SELECT CuratorName FROM curator "
                + "WHERE CuratorPhone = \"90394857\" INTO cName;");

        conn.commit();

        System.out.println("Sp1 created");

        CallableStatement cs3 = conn.prepareCall("{call sp1(?)}");
        cs3.registerOutParameter(1, java.sql.Types.VARCHAR);
        cs3.execute();
        String result = cs3.getString("cName");
        System.out.println("Result from sp1:" + result);

    } catch (Exception e) {

        System.out.println(e);
    }

}

1 个答案:

答案 0 :(得分:-2)

如果您的存储过程定义包含一个IN参数,查看您共享的代码,那么Call语句应该如下所示

 CallableStatement cs3 = conn.prepareCall("{call sp1(?)}");
    cs3.setString(1, java.sql.Types.VARCHAR);

该参数需要设置为IN参数。

如果您的存储过程定义包含OUT参数,则需要修改您的调用语句。

CallableStatement cs3 = conn.prepareCall("{? = call sp1()}");
        cs3.registerOutParameter(1, java.sql.Types.VARCHAR);

在任何情况下,分享您的程序定义,这将使其更清晰。