Java “处理PLSQL”;“输入输出”;JDBC中的参数

Java “处理PLSQL”;“输入输出”;JDBC中的参数,java,jdbc,parameters,plsql,procedure,Java,Jdbc,Parameters,Plsql,Procedure,我使用JDBC调用以下PL/SQL过程。其中一个参数的类型为IN-OUT PROCEDURE update_emp_commpct(emp_id IN employees.employee_id%type , new_comm_pct_incr IN OUT employees.commission_pct%type); 我很想知道这种类型的参数是否应该与其他类型的参数区别对待。一位专家向我指出: 其内容如下: 对于INOUT参数,最好注册输出 参数,然后再设置其输入值 为什么在设置输出输入

我使用
JDBC
调用以下
PL/SQL
过程。其中一个参数的类型为
IN-OUT

PROCEDURE update_emp_commpct(emp_id IN employees.employee_id%type , new_comm_pct_incr IN OUT employees.commission_pct%type); 
我很想知道这种类型的参数是否应该与其他类型的参数区别对待。一位专家向我指出:

其内容如下:

对于INOUT参数,最好注册输出 参数,然后再设置其输入值

为什么在设置输出输入值之前注册输出是一种好做法?有人能详细说明一下吗?我尝试了两种方法,结果都是一样的

它还说:

INOUT参数映射到Java中参数类型的数组

我无法理解这一点。为什么IN-OUT参数映射到Java中的数组参数?我是否遗漏了什么?在下面我试用的代码中,我将其映射到java.sql.Numeric

public float updateEmpCommpct(int empId , float incrementVal)
{
    Connection conn = null;
    CallableStatement callStmt = null;
    float newCommPct = -1f;

    try 
    {
        // Registering the JDBC Driver
        // Class.forName(JDBC_DRIVER_ORACLE);

        // Creating a database connection
        conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PWD);

        // Creating a sql string
        String callProc = "{ call HR.EMP_PKG.update_emp_commpct(? , ?)}";

        // Create a callable statement
        callStmt = conn.prepareCall(callProc);

        // Bind Values to the IN parameters
        callStmt.setInt(1, empId);



        // Dealing with IN/OUT parameter
           // (1) Register the OUT parameter first
        callStmt.registerOutParameter(2, java.sql.Types.NUMERIC);
           // (2) Now bind a value to it
        callStmt.setFloat(2, incrementVal);

        // Execute the callable statement
        callStmt.execute();

        // Get the value of the OUT parameter
        newCommPct = callStmt.getFloat(2);
        System.out.println("Employee with Id : "+ empId + " has his commission percentage updated to: " + newCommPct);
    } 
    catch (SQLException se) 
    {
        System.out.println("Exception occured in the database");
        System.out.println("Exception message: "+ se.getMessage());
        System.out.println("Database error code: "+ se.getErrorCode());
        se.printStackTrace();
    }
    finally
    {
        // Clean up
        if(callStmt != null)
        {
            try
            {
                callStmt.close();
            } 
            catch (SQLException se2) 
            {
                se2.printStackTrace();
            }
        }

        if(conn != null)
        {
            try
            {
                conn.close();
            } 
            catch (SQLException se2) 
            {
                se2.printStackTrace();
            }
        }
    }

    return newCommPct;
}

您指出的链接涉及javadb——换句话说,Derby数据库及其驱动程序实现=>。您需要遵循以下链接(对于Oracle Database 10.x JDBC驱动程序):如果您使用的是Oracle Database,则文档中没有提到任何位置。我猜url应该是javadb。接得好。