Java如何检查OUT参数值是否为null?

本示例向您展示如何使用CallableStatement.wasNull()方法调用来查看最后一个OUT参数是否具有SQL值NULL。

package org.nhooo.example.jdbc;

import java.sql.Connection;
import java.sql.CallableStatement;
import java.sql.DriverManager;
import java.sql.Types;
import java.sql.SQLException;

public class WasNullExample {
    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)) {

            // 准备调用sored过程
            String query = "call GetProductByPrice2(?, ?)";
            CallableStatement cb = connection.prepareCall(query);

            // 设置输入参数
            cb.setDouble(1, 40d);

            // 注册OUT参数
            cb.registerOutParameter(2, Types.VARCHAR);

            // 执行查询
            cb.executeQuery();

            // 获取OUT参数值
            cb.getString(2);

            // 检查最后一个OUT参数的值是否为SQL NULL。
            // 仅在调用a之后,才应调用此方法
            //吸气方法 否则,没有价值可用于
            // 确定它是否为空。
            if (cb.wasNull()) {
                System.out.println("Product has an SQL NULL value");
            } else {
                System.out.println("Product: " + cb.getString(2));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

这是我们在上面的示例中调用的存储过程脚本。

DELIMITER ;;
DROP PROCEDURE IF EXISTS GetProductByPrice2;;
CREATE PROCEDURE GetProductByPrice2(IN product_price DECIMAL, OUT product_name VARCHAR(50))
  BEGIN
    SELECT NAME INTO product_name FROM products WHERE price = product_price;
  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>

Maven中央