
CallableStatement 接口提供执行存储过程的方法。由于 JDBC API 提供了存储过程 SQL 转义语法,因此您可以以单一标准方式调用所有 RDBMS 的存储过程。
创建 CallableStatement
您可以创建 Connection接口的prepareCall()方法来调用strong>CallableStatement(接口)。此方法接受一个表示调用存储过程的查询的字符串变量,并返回一个 CallableStatement 对象。
Callable 语句可以具有输入参数、输出参数或两者都有。要将输入参数传递给过程调用,您可以使用占位符并使用 CallableStatement 接口提供的 setter 方法(setInt()、setString()、setFloat())为这些参数设置值。
假设您数据库中有一个名为 myProcedure 的过程,您可以准备一个可调用语句,如下所示:
//Preparing a CallableStatementCallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
为输入参数设置值
您可以使用 setter 方法为过程调用的输入参数设置值。
它们接受两个参数,其中一个是整数值表示输入参数的放置索引,另一个是 int 或、String 或、float 等…表示您需要传递的值向过程输入参数。
注意:除了索引之外,您还可以以字符串格式传递参数名称。
cstmt.setString(1, "Raghav");cstmt.setInt(2, 3000);cstmt.setString(3, "Hyderabad");
执行 Callable 语句
创建 CallableStatement 对象后,您可以使用 execute() 方法之一来执行它。
cstmt.execute();
示例
假设 MySQL 数据库中有一个名为 Employee 的表,其中包含以下数据:
+---------+--------+----------------+| Name | Salary | Location |+---------+--------+----------------+| Amit | 30000 | Hyderabad || Kalyan | 40000 | Vishakhapatnam || Renuka | 50000 | Delhi || Archana | 15000 | Mumbai |+---------+--------+----------------+
我们创建了一个名为 myProcedure 的过程来将值插入到该表中,如下所示:
Create procedure myProcedure (IN name VARCHAR(30), IN sal INT, IN loc VARCHAR(45)) -> BEGIN -> INSERT INTO Employee(Name, Salary, Location) VALUES (name, sal, loc); -> END //
下面是一个 JDBC 示例,它使用可调用语句调用上面创建的过程,将新记录插入到 Employee 表中。
import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class CallableStatementExample { public static void main(String args[]) throws SQLException { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/testdb"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Preparing a CallableStateement CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}"); cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad"); cstmt.setString(1, "Kalyan"); cstmt.setInt(2, 4000); cstmt.setString(3, "Vishakhapatnam"); cstmt.setString(1, "Rukmini"); cstmt.setInt(2, 5000); cstmt.setString(3, "Delhi"); cstmt.setString(1, "Archana"); cstmt.setInt(2, 15000); cstmt.setString(3, "Mumbai"); cstmt.execute(); System.out.println("Rows inserted ...."); }}
输出
Connection established......Rows inserted ....
如果使用 select 查询检索 Employee 表的内容,您可以观察到新添加的记录,如下所示:
mysql> select * from employee;+---------+--------+----------------+| Name | Salary | Location |+---------+--------+----------------+| Amit | 30000 | Hyderabad || Kalyan | 40000 | Vishakhapatnam || Renuka | 50000 | Delhi || Archana | 15000 | Mumbai || Raghav | 3000 | Hyderabad || Raghav | 3000 | Hyderabad || Kalyan | 4000 | Vishakhapatnam || Rukmini | 5000 | Delhi || Archana | 15000 | Mumbai |+---------+--------+----------------+9 rows in set (0.00 sec)
以上就是JDBC 中的 CallableStatement 是什么?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/110992.html
微信扫一扫
支付宝扫一扫