JDBC中的CallableStatement是什么?
CallableStatement接口提供的方法来执行该存储过程。由于JDBC API提供了存储过程SQL转义语法,因此您可以以单一标准方式调用所有RDBMS的存储过程。
创建一个CallableStatement
您可以使用Connection接口的prepareCall()方法创建CallableStatement(接口)的对象。此方法接受表示查询的字符串变量来调用存储过程,并返回CallableStatement对象。
Callable语句可以具有输入参数,输出参数或两者都有。要将输入参数传递给过程调用,您可以使用占位符,并使用CallableStatement接口提供的setter方法(setInt()setString()
,,setFloat()
)为这些参数设置值。
假设您在数据库中有一个过程名称myProcedure,则可以将可调用语句准备为:
//Preparing a CallableStatementCallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
设置输入参数的值
您可以使用setter方法将值设置为过程调用的输入参数。
它们接受两个参数,一个是表示输入参数的放置索引的整数值,另一个是int或String或float等…表示需要作为输入参数传递给过程的值。
注意:除了索引以外,您还可以使用String格式传递参数名称。
cstmt.setString(1, "Raghav");cstmt.setInt(2, 3000);
cstmt.setString(3, "Hyderabad");
执行可调用语句
创建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 {
//注册驱动程序
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//获得连接
String mysqlUrl = "jdbc:mysql://localhost/testdb";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
//准备一个CallableStatement-
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 ....
如果使用选择查询检索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是什么? 的全部内容, 来源链接: utcz.com/z/322014.html