JDBC中的CallableStatement是什么?

CallableStatement接口提供的方法来执行该存储过程。由于JDBC API提供了存储过程SQL转义语法,因此您可以以单一标准方式调用所有RDBMS的存储过程。

创建一个CallableStatement

您可以使用Connection接口的prepareCall()方法创建CallableStatement(接口)的对象。此方法接受表示查询的字符串变量来调用存储过程,并返回CallableStatement对象。

Callable语句可以具有输入参数,输出参数或两者都有。要将输入参数传递给过程调用,您可以使用占位符,并使用CallableStatement接口提供的setter方法(setInt()setString(),,setFloat())为这些参数设置值。

假设您在数据库中有一个过程名称myProcedure,则可以将可调用语句准备为:

//Preparing a CallableStatement

CallableStatement 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

回到顶部