Verwenden von Parametermetadaten

JDBC-Treiber herunterladen

Für die Abfrage der enthaltenen Parameter bei SQLServerPreparedStatement- oder SQLServerCallableStatement-Objekten ist im Microsoft JDBC-Treiber für SQL Server die SQLServerParameterMetaData-Klasse implementiert. Diese Klasse enthält eine Vielzahl von Feldern und Methoden, die Informationen in der Form eines einzelnen Werts zurückgeben.

Sie können die getParameterMetaData-Methoden der SQLServerPreparedStatement- und SQLServerCallableStatement-Methoden verwenden, um ein SQLServerParameterMetaData-Objekt zu erstellen.

Im folgenden Beispiel wird eine offene Verbindung mit der AdventureWorks2022-Beispieldatenbank an die Funktion übergeben, mit der getParameterMetaData-Methode der SQLServerCallableStatement-Klasse wird ein SQLServerParameterMetaData-Objekt zurückgegeben, und dann werden verschiedene Methoden des SQLServerParameterMetaData-Objekts zum Anzeigen von Informationen zu Typ und Modus der Parameter verwendet, die in der gespeicherten Prozedur „HumanResources.uspUpdateEmployeeHireInfo“ enthalten sind.

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();
    }
}

Hinweis

Bei der Verwendung der SQLServerParameterMetaData-Klasse mit Prepared Statements gibt es einige Einschränkungen.

Mit Microsoft JDBC-Treiber 6.0 (oder höher) für SQL Server: Bei SQL Server 2008 oder 2008 R2 unterstützt der JDBC-Treiber SELECT-, DELETE-, INSERT- und UPDATE-Anweisungen. Diese Anweisungen dürfen jedoch keine Unterabfragen und/oder Joins enthalten.

Auch MERGE-Abfragen werden bei SQL Server 2008 oder 2008 R2 nicht für die SQLServerParameterMetaData-Klasse unterstützt. Bei SQL Server 2012 und höheren werden Parametermetadaten in komplexen Abfragen unterstützt.

Das Abrufen von Parametermetadaten für verschlüsselte Spalten wird nicht unterstützt. Mit Microsoft-JDBC-Treiber 4.1 oder 4.2 für SQL Server: Der JDBC-Treiber unterstützt SELECT-, DELETE-, INSERT- und UPDATE-Anweisungen. Diese Anweisungen dürfen jedoch keine Unterabfragen und/oder Joins enthalten. Auch MERGE-Abfragen werden nicht für die SQLServerParameterMetaData-Klasse unterstützt.