Java如何在CallableStatement中注册参数?

本示例说明如何使用CallableStatement.registerOutParameter()方法调用注销用于执行存储过程的参数。

我们必须在执行查询之前注册out参数。  

registerOutParameter()方法采用两个参数,参数的索引和out参数的sql数据类型。

package org.nhooo.example.jdbc;

import java.sql.*;

public class RegisterOutParameter {

    private static final String URL = "jdbc:mysql://localhost/nhooo";

    private static final String USERNAME = "root";

    private static final String PASSWORD = "";

    public static void main(String[] args) {

        try (Connection connection =

                 DriverManager.getConnection(URL, USERNAME, PASSWORD)) {

            // 创建一个CallableStatement来执行存储的

            // 程序

            String query = "call GetDetailByName(?, ?, ?)";

            CallableStatement cb = connection.prepareCall(query);

            // 设置输入参数

            cb.setString(1, "Ruby on Rails");

            // 注册输出参数

            cb.registerOutParameter(2, Types.VARCHAR);

            cb.registerOutParameter(3, Types.DECIMAL);

            // 执行查询

            cb.executeQuery();

            // 获取查询结果输出

            System.out.println("Name  : " + cb.getString(1));

            System.out.println("Code  : " + cb.getString(2));

            System.out.println("Price : " + cb.getBigDecimal(3));

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

}

这是我们在上面的代码中调用的MySQL存储过程。

DELIMITER ;;

DROP PROCEDURE IF EXISTS `GetDetailByName`;;

CREATE PROCEDURE `GetDetailByName`(INOUT  product_name  VARCHAR(50),

                                   OUT product_code  VARCHAR(10),

                                   OUT product_price DECIMAL(10, 2))

  BEGIN

    SELECT code INTO product_code FROM products WHERE name = product_name;

    SELECT price INTO product_price FROM products WHERE name = product_name;

  END;;

DELIMITER ;

Maven依赖

<!-- https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/8.0.17/mysql-connector-java-8.0.17.jar -->

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>8.0.17</version>

</dependency>

以上是 Java如何在CallableStatement中注册参数? 的全部内容, 来源链接: utcz.com/z/330734.html

回到顶部