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。接得好。