使用参数元数据

下载 JDBC 驱动程序

为了查询 SQLServerPreparedStatement 对象或 SQLServerCallableStatement 对象以了解其所包含的参数,Microsoft JDBC Driver for SQL Server 实现了 SQLServerParameterMetaData 类。 该类包含很多以单个值的格式返回信息的字段和方法。

若要创建 SQLServerParameterMetaData 对象,可以使用 SQLServerPreparedStatement 类和 SQLServerCallableStatement 类的 getParameterMetaData 方法。

在下面的示例中,将向此函数传递 AdventureWorks2022 示例数据库的开放式连接,使用 SQLServerCallableStatement 类的 getParameterMetaData 方法返回 SQLServerParameterMetaData 对象,然后使用 SQLServerParameterMetaData 对象的各种方法显示有关 HumanResources.uspUpdateEmployeeHireInfo 存储过程内所含参数的类型和模式的信息。

public static void getParameterMetaData(Connection con) {
    try(CallableStatement cstmt = con.prepareCall("{call HumanResources.uspUpdateEmployeeHireInfo(?, ?, ?, ?, ?)}");) {
        ParameterMetaData pmd = cstmt.getParameterMetaData();
        int count = pmd.getParameterCount();
        for (int i = 1; i <= count; i++) {
            System.out.println("TYPE: " + pmd.getParameterTypeName(i) + " MODE: " + pmd.getParameterMode(i));
        }
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

注意

将 SQLServerParameterMetaData 类和预定义语句一起使用时,存在一些限制。

使用 Microsoft JDBC Driver 6.0 for SQL Server(或更高版本):在使用 SQL Server 2008 或 2008 R2 时,JDBC 驱动程序支持 SELECT、DELETE、INSERT 和 UPDATE 语句,前提是这些语句不包含子查询和/或联接

在使用 SQL Server 2008 或 2008 R2 时,SQLServerParameterMetaData 类也不支持 MERGE 查询。 对于 SQL Server 2012 和较高版本,支持带有复杂查询的参数元数据。

不支持检索已加密列的参数元数据。 使用 Microsoft JDBC Driver 4.1 for SQL Server 或 Microsoft JDBC Driver 4.2 for SQL Server:JDBC 驱动程序支持 SELECT、DELETE、INSERT 和 UPDATE 语句,前提是这些语句不包含子查询和/或联接。 SQLServerParameterMetaData 类也不支持 MERGE 查询。