Migration von JDBC-Treiber 3.x auf JDBC-Treiber 4.x

Der JDBC-Treiber 4.x führt gegenüber dem mehrere JDBC-Treiber 3.x mehrere neue Features und Verbesserungen ein. Dieses Thema bietet einen Überblick über die öffentlichen API-Änderungen und neue Features sowie Informationen zur Migration von JDBC-Treiber 3.x auf JDBC-Treiber 4.x.

Öffentliche API-Übersicht

Die öffentliche API des Snowflake-JDBC-Treibers befindet sich unter dem net.snowflake.client.api-Paket (siehe API-Referenz). Die Änderungen an der öffentlichen API zwischen JDBC-Treiber 3.x und JDBC-Treiber 4.x sind in der folgenden Tabelle aufgeführt:

Paket

Beschreibung

api.driver

JDBC-Treiberregistrierung und Einstiegspunkt

api.connection

Snowflake-spezifische Verbindungs- und Datenbankmetadaten-Schnittstellen, Streamtransfer-Konfiguration

api.datasource

DataSource-Implementierung zum Erstellen und Verwalten von Verbindungen

api.pooling

Verbindungspool-Datenquelle für Anwendungen, die gepoolte Verbindungen benötigen

api.resultset

Resultset-Schnittstellen, Feldmetadaten, Snowflake-Datentypen und asynchroner Abfragestatus

api.auth

Definitionen der Authentifizierungsmethode

api.loader

API zum Massenladen von Daten für umfangreiche Datenaufnahme mit Fortschritts-Callbacks

Zusätzlich enthält der Treiber Klassen im net.snowflake.client.internal-Paket, die nicht Teil der öffentlichen API sind. Diese Klassen werden intern vom Treiber verwendet und sind nicht für die Verwendung durch Anwendungsentwickler vorgesehen. Verwenden Sie die internen APIs auf eigene Gefahr: Sie können ohne Ankündigung und ohne Garantie für Abwärtskompatibilität geändert werden.

Codeänderungen zwischen JDBC-Treiber 3.x und JDBC-Treiber 4.x

Namensänderungen der Treiberklasse

Der Name der Treiberklasse hat sich geändert.

Vorher (3.x)

Nachher (4.x)

com.snowflake.client.jdbc.SnowflakeDriver

net.snowflake.client.api.driver.SnowflakeDriver

Änderungen bei der Erstellung von Datenquellen

SnowflakeDataSource und SnowflakeConnectionPoolDataSource sind jetzt Schnittstellen. Verwenden von Factory-Klassen anstelle direkter Instanziierung.

Komponente

Factory-Methode

SnowflakeDataSource

SnowflakeDataSourceFactory.createDataSource()

SnowflakeConnectionPoolDataSource

SnowflakeConnectionPoolDataSourceFactory.createConnectionPoolDataSource()

Änderungen des Authentifizierungstyps

Der Authentifizierungstyp hat sich von SNOWFLAKE zu SNOWFLAKE_JDBC geändert.

Vorher (3.x)

Nachher (4.x)

externalbrowser

EXTERNAL_BROWSER

Weitere Authentifizierungstypen sind die folgenden:

  • SNOWFLAKE

  • OKTA

  • EXTERNAL_BROWSER

  • OAUTH

  • SNOWFLAKE_JWT

  • ID_TOKEN

  • USERNAME_PASSWORD_MFA

  • OAUTH_AUTHORIZATION_CODE

  • OAUTH_CLIENT_CREDENTIALS

  • PROGRAMMATIC_ACCESS_TOKEN

  • WORKLOAD_IDENTITY

Änderungen beim Hoch- und Herunterladen von Streams

Die SnowflakeConnection-Schnittstelle hat Überlastungen für Stream-Operationen vereinfacht:

  • Hochladen:

    • uploadStream(stageName, destFileName, inputStream)

    • uploadStream(stageName, destFileName, inputStream, UploadStreamConfig)

    • UploadStreamConfig-Optionen: destPrefix, compressData (Standard: true)

  • Download:

    • downloadStream(stageName, sourceFileName)

    • downloadStream(stageName, sourceFileName, DownloadStreamConfig)

    • DownloadStreamConfig-Optionen: dekomprimieren (Standard: false)

SnowflakeType-Änderungen

Die SnowflakeType-Enumeration wurde entfernt. Werte des Typs bleiben gleich, aber die Enumeration wird nicht mehr unterstützt.

QueryStatus und SnowflakeAsyncResultSet-Änderungen

Version 4.0.0 hat folgende Änderungen bezüglich Abfragen und Resultsets vorgenommen:

  • Die QueryStatus-Enumeration wurde durch DTO ersetzt (vorher bekannt als QueryStatusV2). Sie enthält dieselben Daten, jedoch auf thread-sichere Weise. Um den Abfragestatus abzurufen, entpacken Sie Ihr Resultset in SnowflakeAsyncResultSet und rufen getStatus auf.

  • Die getQueryErrorMessage für ein Resultset wird entfernt, kann aber direkt aus getErrorMessage von QueryStatus abgerufen werden.

Wenn Sie einen Enumerationswert benötigen, der den Status repräsentiert, rufen Sie getStatus für QueryStatus auf.