个性化阅读
专注于IT技术分析

Java CallableStatement接口

CallableStatement接口用于调用存储过程和函数。

通过使用存储过程和函数, 我们可以在数据库上使用业务逻辑, 因为这些过程和函数是预编译的, 因此可以提高性能。

假设你需要根据出生日期获取雇员的年龄, 则可以创建一个函数来接收日期作为输入, 并返回雇员的年龄作为输出。


存储过程和函数之间有什么区别?

存储过程和函数之间的区别如下:

储存程序 功能
用于执行业务逻辑。 用于执行计算。
不得具有返回类型。 必须具有返回类型。
可能会返回0个或多个值。 可能仅返回一个值。
我们可以从过程中调用函数。 无法从函数调用过程。
程序支持输入和输出参数。 功能仅支持输入参数。
使用try / catch块的异常处理可以在存储过程中使用。 使用try / catch的异常处理不能在用户定义的函数中使用。

如何获取CallableStatement的实例?

Connection接口的prepareCall()方法返回CallableStatement的实例。语法如下:

public CallableStatement prepareCall("{ call procedurename(?, ?...?)}");

下面给出了获取CallableStatement实例的示例:

CallableStatement stmt=con.prepareCall("{call myprocedure(?, ?)}");

它调用接收2个参数的过程myprocedure。


使用JDBC调用存储过程的完整示例

要调用存储过程, 你需要在数据库中创建它。在这里, 我们假设存储过程看起来像这样。

create or replace procedure "INSERTR"
(id IN NUMBER, name IN VARCHAR2)
is
begin
insert into user420 values(id, name);
end;
/

表结构如下:

create table user420(id number(10), name varchar2(200));

在此示例中, 我们将调用存储过程INSERTR, 该存储过程接收id和name作为参数并将其插入到表user420中。请注意, 你还需要创建user420表来运行此应用程序。

import java.sql.*;
public class Proc {
public static void main(String[] args) throws Exception{

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");

CallableStatement stmt=con.prepareCall("{call insertR(?, ?)}");
stmt.setInt(1, 1011);
stmt.setString(2, "Amit");
stmt.execute();

System.out.println("success");
}
}

现在检查数据库中的表, 将值插入到user420表中。


使用JDBC调用函数的示例

在此示例中, 我们调用sum4函数, 该函数接收两个输入并返回给定数字的总和。在这里, 我们使用了CallableStatement接口的registerOutParameter方法, 该方法将输出参数注册为其相应的类型。它向CallableStatement提供有关所显示结果类型的信息。

Types类定义了许多常量, 例如INTEGER, VARCHAR, FLOAT, DOUBLE, BLOB, CLOB等。

让我们首先在数据库中创建简单函数。

create or replace function sum4
(n1 in number, n2 in number)
return number
is 
temp number(8);
begin
temp :=n1+n2;
return temp;
end;
/

现在, 让我们编写一个简单的程序来调用该函数。

import java.sql.*;

public class FuncSum {
public static void main(String[] args) throws Exception{

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");

CallableStatement stmt=con.prepareCall("{?= call sum4(?, ?)}");
stmt.setInt(2, 10);
stmt.setInt(3, 43);
stmt.registerOutParameter(1, Types.INTEGER);
stmt.execute();

System.out.println(stmt.getInt(1));
		
}
}
Output: 53
赞(0)
未经允许不得转载:srcmini » Java CallableStatement接口

评论 抢沙发

评论前必须登录!