如何使用JDBC程序调用返回输出参数的存储过程?
答:存储过程是子例程,是SQL语句的一部分,存储在SQL目录中。所有可以访问关系数据库的应用程序(Java,Python,PHP等)都可以访问存储过程。
存储过程包含IN和OUT参数或两者。如果您使用SELECT语句,它们可能会返回结果集。存储过程可以返回多个结果集。
您可以使用以下语法调用存储过程:
CALL procedure_name (input_parameter1, input_parameter2, input_parameter3)
JDBC提供了标准的存储过程SQL转义语法,您可以使用该语法在所有RDBMS中进行过程
要使用JDBC程序调用存储过程,您需要:
使用DriverManager类的registerDriver()方法注册driver:类。将驱动程序类名称作为参数传递给它。
建立连接:使用DriverManager类的getConnection()方法连接数据库。将URL(字符串),用户名(字符串),密码(字符串)作为参数传递给它。
Create Statement:使用Connection接口的
prepareCall()
方法创建CallableStatement对象。执行查询:使用
executeupdate()
Statement接口的方法执行查询。
示例
假设我们在数据库中有一个名为Sales的表,其中包含以下内容:
+----+-------------+--------------+--------------+--------------+-------+----------------+| ID | ProductName | CustomerName | DispatchDate | DeliveryTime | Price | Location |
+----+-------------+--------------+--------------+--------------+-------+----------------+
| 1 | Key-Board | Raja | 2019-09-01 | 05:30:00 | 2000 | Hyderabad |
| 2 | Earphones | Roja | 2019-05-01 | 05:30:00 | 2000 | Vishakhapatnam |
| 3 | Mouse | Puja | 2019-03-01 | 05:29:59 | 3000 | Vijayawada |
| 4 | Mobile | Vanaja | 2019-03-01 | 04:40:52 | 9000 | Chennai |
| 5 | Headset | Jalaja | 2019-04-06 | 18:38:59 | 6000 | Goa |
+----+-------------+--------------+--------------+--------------+-------+----------------+
我们在数据库中创建了一个名为getProductPrice的存储过程,如下所示:
mysql> DELIMITER // ;mysql> CREATE PROCEDURE getProductPrice (
IN in_id INTEGER,
OUT out_ProdName VARCHAR(20),
OUT out_CustName VARCHAR(20),
OUT out_price INTEGER)
BEGIN
SELECT ProductName, CustomerName, Price
INTO out_ProdName, out_CustName, out_price
FROM Sales where id = in_id;
END //
mysql> DELIMITER ;
此过程接受客户的ID作为IN参数,并从客户表中返回产品名称(String),客户名称(String)和价格(int)值作为OUT参数。
接下来的JDBC程序建立与MySQL数据库的连接,并通过传递一个ID值来调用名为getProductPrice的过程,并从该过程的OUT参数中检索产品名称,客户名称和价格值,并显示这些值。
import java.sql.CallableStatement;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
public class CallngStoredProcedureExample_OUT {
public static void main(String args[]) throws SQLException {
//注册驱动程序
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//获得连接
String mysqlUrl = "jdbc:mysql://localhost/mydatabase";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
//准备一个CallableStatement来调用过程
CallableStatement cstmt = con.prepareCall("{call getProductPrice(?, ? ,?, ? )}");
//设置TN参数的值
cstmt.setInt(1, 3);
//注册OUT参数的类型
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.registerOutParameter(3, Types.VARCHAR);
cstmt.registerOutParameter(4, Types.INTEGER);
//执行CallableStatement-
cstmt.executeUpdate();
//检索产品名称,客户名称和价格的值
String product_name = cstmt.getString(2);
String customer_Name = cstmt.getString(3);
int price = cstmt.getInt(4);
System.out.println("Details of the sale with given id are: ");
//显示值
System.out.println("Product Name: "+product_name);
System.out.println("Customer Name: "+customer_Name);
System.out.println("Price: "+price);
}
}
输出结果
Connection established......Details of the sale with given id are:
Product Name: Mouse
Customer Name: Puja
Price: 3000
以上是 如何使用JDBC程序调用返回输出参数的存储过程? 的全部内容, 来源链接: utcz.com/z/356599.html