Microsoft JDBC-illesztőprogram SQL Serverhez

JDBC-illesztőprogram letöltése

A Microsoft Java Database Connectivity (JDBC) Driver for SQL Server egy Type 4 JDBC illesztőprogram (tiszta Java, közvetlenül a SQL Server TDS protokollt beszéli, nincs szükség natív könyvtárakra), amely lehetővé teszi, hogy bármely Java alkalmazás vagy alkalmazásszerver csatlakozzon a Microsoft SQL-hez Database Engine az Azure SQL Database-ben, SQL database a Fabric-ben, Azure SQL Managed Instance-ban, valamint minden támogatott SQL Server verzióban és kiadásban (beleértve az Express Edition-eket is). Implementálja a szabványos JDBC API-kat, és együttműködik a főbb Java alkalmazáskiszolgálókkal, beleértve az IBM WebSphere-et és az SAP NetWeaver-t.

Válassza ki a kiindulási pontot

Azure SQL üzemi alapkonfigurációja

Használja ezt a kódrészletet egy éles Azure SQL kapcsolat kiindulópontjaként. Betölti a kiszolgáló nevét és az adatbázis nevét az alkalmazáskonfigurációból, például Azure App Service alkalmazásbeállításokat, környezeti változókat vagy konfigurációs fájlokat, és programozott módon állítja be a kapcsolat többi tulajdonságát. A konfiguráció egyesíti a Transport Layer Security (TLS), a felügyelt identitást, az átmeneti hibákra irányuló kapcsolat újrapróbálkozását, a feladatátvételi csoport gyors helyreállítását, a hosszabb bejelentkezési időtúllépést a hidegindítású feladatátvétel lefedéséhez, valamint konfigurálható újrapróbálkozási logikát (CRL) a Azure SQL szabályozást vagy a lekérdezések közötti feladatátvételt érintő utasításokhoz.

A nagyobb biztonság és a könnyebb felskálázás érdekében tartsa a kódon kívül a kapcsolati adatokat. Éles környezetben tárolja a csatlakozási adatokat az alkalmazás konfigurációs rendszerében, és használja az Azure Key Vaultot a bizalmas értékek tárolására, valamint a központilag felügyelt csatlakozási beállítások kezelésére. További információ: Kapcsolati sztringek biztonságossá tétele.

A cikkben szereplő Java kódrészletek kihagyják az importot és az osztályburkolókat a rövidség kedvéért.

// Load endpoint details from application configuration. In Azure App Service,
// these can come from app settings or Key Vault-backed settings.
String serverName = System.getenv("SQL_SERVER_NAME");
String databaseName = System.getenv("SQL_DATABASE_NAME");
String port = System.getenv().getOrDefault("SQL_PORT", "1433");

if (serverName == null || databaseName == null) {
    throw new IllegalStateException(
            "Set SQL_SERVER_NAME and SQL_DATABASE_NAME in your application configuration.");
}

String url = "jdbc:sqlserver://" + serverName + ":" + port;

Properties props = new Properties();
props.setProperty("databaseName", databaseName);
props.setProperty("encrypt", "true");
props.setProperty("trustServerCertificate", "false");
props.setProperty("authentication", "ActiveDirectoryManagedIdentity");
props.setProperty("loginTimeout", "120");         // 90 is the minimum floor for this retry profile; 120 leaves practical failover margin
props.setProperty("connectRetryCount", "5");     // retry transient connection failures up to 5 times (default 1)
props.setProperty("connectRetryInterval", "15"); // 15 seconds between connection retries (default 10)
props.setProperty("multiSubnetFailover", "true"); // recommended for any Azure SQL HA listener
// props.setProperty("applicationIntent", "ReadOnly"); // uncomment to route to a readable secondary
// Retry deadlocks and lock timeouts, plus Azure SQL throttling and mid-query failover.
props.setProperty("retryExec", "1205,1222:3,5+5;40501,40613,40197,10928,10929,49918:4,5*2");

try (Connection conn = DriverManager.getConnection(url, props);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT 1")) {
    while (rs.next()) {
        System.out.println(rs.getInt(1));
    }
}

Ez a kódrészlet az Azure SQL Database feladatátvételi csoportjaihoz és az Azure SQL Managed Instance-hez lett hangolva.

multiSubnetFailover=true csak akkor állítsa be, ha feladatátvételi csoport figyelőjéhez, rendelkezésre állási csoport figyelőjéhez vagy feladatátvevő fürtpéldány végpontjához csatlakozik. Ha ezt a tulajdonságot olyan végpontokon használja, amelyek nem magas rendelkezésre állású (HA) figyelők, az ronthatja a teljesítményt, és nem támogatott. További információ: JDBC-illesztőprogramok támogatása magas rendelkezésre álláshoz és vészhelyreállításhoz.

A kódrészlet nem állítja be a retryConn értéket, mert az illesztőprogram alapértelmezés szerint már újrapróbálja a leggyakoribb Azure SQL átmeneti kapcsolódási hibákat (beleértve a 4060, 40197, 40501, 40613, 49918, 49919, 49920, 10928 és 10929 hibákat), amelyet a connectRetryCount és connectRetryInterval szabályoz. A teljes listát a beépített átmeneti kapcsolat hibalistájában találja. A retryConn elemet csak a +<errorNumber> használatával adja hozzá, ha a listát olyan hibával kell bővítenie, amelyre még nem terjed ki, vagy állítsa <errorNumber> értékre (kezdő + nélkül) annak lecseréléséhez. Ha ugyanazt az értéket egy JDBC URL-ben adja meg, foglalja retryConn={+<errorNumber>} vagy retryConn={<errorNumber>} közé.

A retryExec tulajdonság két részből áll, és programozott beállításkor rule1;rule2 alakban kell megadni. Ha ugyanazt az értéket egy JDBC URL-címben helyezi el, minden szabályt kapcsos zárójelekbe csomagoljon a következő módon {rule1};{rule2}:

  • {1205,1222:3,5+5} háromszor újrapróbálja a holtpont áldozatául eső tranzakciókat (1205) és a zároláskérési időtúllépéseket (1222) 5, 10, illetve 15 másodperces lineárisan növekvő várakozási idővel. Az 1205-ös verzió esetében SQL Server visszaállítja a tranzakciót, mielőtt az illesztő észleli a hibát, így egyetlen utasítás újrafuttatása biztonságos. Ha a holtpontba került utasítás egy több utasításból álló tranzakció része volt, a korábbi utasítások is visszagörgetődtek, és a CRL nem hajtja végre újra őket, ezért érdemes a teljes tranzakciót saját újrapróbálkozási ciklusba foglalni. 1222 nyitva hagyja a tranzakciót, és az utasításszintű újrapróbálkozás csak az eredeti tranzakción belül futtatja újra az utasítást; ha a tranzakció időtartamát is meg kell kötnie, akkor a teljes tranzakciót a saját újrapróbálkozása során kell becsomagolnia.

  • {40501,40613,40197,10928,10929,49918:4,5*2}négyszer újrapróbálkozza Azure SQL szabályozással, a lekérdezések közötti feladatátvétellel és az erőforrás-korláttal kapcsolatos hibákat, 5, 10, 20 és 40 másodperces exponenciális visszalépéssel. Ezek a hibák szerepelnek a kapcsolódási hurok beépített átmeneti listájában, de retryExec ez az, ami elkapja őket, amikor egy létrehozott kapcsolaton lekérdezés közben aktiválódnak. A CRL-ek visszalépési idejét a(z) queryTimeout korlátozza. Ha a(z) queryTimeout értékét a következő tervezett várakozásnál alacsonyabbra állítja, az illesztőprogram idő előtt feladja, és újra kivételt dob. Válasszon olyan queryTimeout értéket, amely legalább akkora, mint a CRL-várakozások összesített ideje és az utasítás futási ideje együtt, vagy fogadja el, hogy a leghosszabb visszalépések nem fognak bekövetkezni.

Azure SQL Database feladatátvételi csoportok, Hiperskálázású elnevezett replikák és olvasási skálázás, illetve Always On rendelkezésre állási csoportok figyelői esetén állítsa be a(z) applicationIntent=ReadOnly értéket, ha egy olvasható másodlagos példányhoz szeretne kapcsolódni. Azokban a szuverén felhőkben, ahol a tanúsítvány Subject Alternative Name (SAN) mezője nem tartalmazza azt a gazdagépet, amelyhez csatlakozik, állítsa be úgy a(z) hostNameInCertificate értékét, hogy az is egyezzen (például az Azure Government esetében: *.database.usgovcloudapi.net).

A konfiguráció egyes részeivel kapcsolatos további információkért lásd:

Az átmeneti Azure SQL hibakatalógusát az átmeneti csatlakozási hibák hibaelhárítása című témakörben találja.

Legfontosabb funkciók

  • Szabványalapú JDBC: 4- es típusú illesztő. A JRE 11+ verzió megvalósítja a JDBC 4.2-t, valamint a JDBC 4.3 kéréshatár-metódusait (beginRequest, endRequest), továbbá a Statement idézéssegítőket. A JDBC 4.3 sardolási API-k (setShardingKey, a createConnectionBuilder család) SQLFeatureNotSupportedException dobnak. A JRE 8 verziója a JDBC 4.2-t valósítja meg. A verziónkénti lebontást és a támogatott és nem támogatott 4.3 metódusok teljes listáját a Java és a JDBC specifikációs támogatásában találja.
  • Széles platformtámogatás: Bármely platformon futtatható támogatott Java virtuális géppel (JVM), beleértve a Windows, a Linux és a macOS rendszert is.
  • Alapértelmezés szerint titkosítva: TLS-titkosított kapcsolatok encrypt=true alapértelmezettként az aktuális illesztőprogramokhoz.
  • Microsoft Entra ID hitelesítés: Jelszó nélküli kapcsolatok felügyelt identitással, szolgáltatásnévvel, interaktív, integrált, alapértelmezett hitelesítőadat-lánccal és hozzáférési jogkivonat-folyamatokkal.
  • Kerberos: Integrált hitelesítés helyszíni Active Directoryhoz.
  • NTLM: A Windows kihívás-válasz hitelesítése nem tartományi vagy örökölt környezetekhez.
  • Always Encrypted: Ügyféloldali titkosítás bizalmas oszlopokhoz, opcionális biztonságos enklávékkal a helyszíni műveletekhez.
  • Tömeges másolás: Nagy áteresztőképességű beszúrások a SQLServerBulkCopy API-val és batch insert teljesítmény executeBatch esetén.
  • Kapcsolat ellenálló képessége: Beépített kapcsolat-újrapróbálkozások átmeneti hibák esetén, valamint igény szerint engedélyezhető, konfigurálható újrapróbálkozási logika az utasítások esetén (retryExec), továbbá egy testre szabható kapcsolódási hibalista (retryConn).
  • Gazdag SQL Server adattípus támogatása: datetimeoffset, sql_variant, JSON, térbeli, vektor, táblaértékkel rendelkező paraméterek és felhasználó által definiált típusok.

Első lépések

Cikk Description
Rendszer követelmények Támogatott Java, operációs rendszer és SQL Server verziók.
Támogatási mátrix Részletes kompatibilitási mátrix JDBC-illesztőprogramok kiadásához.
Az SQL Serverhez készült Microsoft JDBC-illesztő letöltése Letöltési hivatkozások, Maven-koordináták és kiadási összetevők.
A JDBC-illesztőprogram használatának első lépései Telepítse az illesztőprogramot, konfigurálja a környezetet, és futtassa az első lekérdezést.
A JDBC-illesztőprogram áttekintése Architektúra, támogatott funkciók és JDBC-specifikációk megfelelősége.

Konfigurálás és csatlakoztatás

Cikk Description
Csatlakozás az SQL Serverhez a JDBC-illesztővel Kapcsolat létesítése egy SQL Server-példánnyal Java használatával.
Csatlakozás Azure SQL-adatbázishoz Csatlakoztasson egy Java-alkalmazást az Azure SQL Database-hez.
A kapcsolat URL-címének létrehozása Teljes hivatkozás az URL-szintaxisra és a jdbc:sqlserver:// tulajdonságokra.
A kapcsolat tulajdonságainak beállítása Minden kapcsolattulajdonság, alapértelmezett érték és beállításuk.
Az adatforrás tulajdonságainak beállítása Konfigurálja a(z) SQLServerDataSource elemet JNDI-vel és alkalmazásszerverekkel való használatra.
Kapcsolattal való munka A kapcsolatok helyes megnyitása, újrafelhasználása és bezárása.
Kapcsolatkészletezés használata JNDI-adatforrások és integráció külső készletekkel.
Kapcsolat rugalmassága A beépített kapcsolat újrapróbálkozásai és a megszakadt kapcsolat észlelése.
Konfigurálható újrapróbálkozás logikája Próbálja újra a sikertelen utasításokat a(z) retryExec használatával, és szabja testre a kapcsolat újrapróbálási listáját a(z) retryConn használatával.
A JDBC-illesztőprogram időtúllépési tulajdonságainak ismertetése loginTimeout, queryTimeout, socket-időtúllépések és azok egymásra hatása.
A JDBC-illesztőprogram üzembe helyezése Csomagolja és helyezze üzembe az illesztőprogramot az alkalmazással együtt.

Hitelesít

Cikk Description
Microsoft Entra-hitelesítés Felügyelt identitás, szolgáltatásnév, interaktív, integrált és hozzáférési jogkivonatos hitelesítés.
Kerberos integrált hitelesítés Kapcsolódjon a Kerberoshoz és az Active Directoryhoz.
NTLM-hitelesítés Hitelesítéshez használja az NTLM hitelesítő adatait.
Ügyféltanúsítvány-hitelesítés visszacsatolási forgatókönyvekhez Ügyfelek hitelesítése tanúsítványokkal a visszacsatolási kapcsolatokon.

Secure

Cikk Description
JDBC-illesztőalkalmazások védelme Biztonsági útmutató az illesztőprogramot használó Java alkalmazásokhoz.
Alkalmazásbiztonság Fenyegetésmodell és részletes védelmi javaslatok.
Kapcsolati karakterláncok biztosítása A hitelesítő adatokat és a kapcsolati karakterláncokat ne tárolja a forráskódban.
Az ügyfél konfigurálása titkosításhoz Megbízhatósági gyökerek, tanúsítvány-rögzítés és TLS-beállítások.
Csatlakozás titkosítással Kényszerítse encrypt=true, és ellenőrizze a kiszolgáló tanúsítványát.
A titkosítás támogatásának ismertetése Hogyan egyeztet TLS-kapcsolatot az illesztőprogram az SQL Serverrel.
Felhasználói bemenet érvényesítése Paraméterezheti az SQL-t, és elkerülheti az injektálást.
FIPS mód Használja az illesztőprogramot FIPS-nek megfelelő környezetekben.
Mindig titkosítva Ügyféloldali titkosítás konfigurálása bizalmas oszlopokhoz.
Mindig titkosított, biztonságos enklávékkal Bővített műveletek engedélyezése a titkosított oszlopokon.
Always Encrypted API-referencia API-felület oszloptitkosítási szolgáltatókhoz és kulcstárolókhoz.

Adatkezelés

Cikk Description
Utasítások és eredményhalmazok használata Statement, PreparedStatement és az eredményhalmazok alapjai.
Utasítások használata a JDBC-illesztővel Paraméteres és nem paraméteres utasítások futtatása.
Összetett utasítások kezelése Tárolt eljárások, több eredmény és frissítési szám.
Eredményhalmazok használata A lekérdezés eredményeinek iterálása, frissítése és görgetése.
Több eredményhalmaz használata Egynél több eredményhalmazt visszaadó lekérdezések kezelése.
A kurzortípusok ismertetése Csak előre, görgethető és frissíthető kurzorok.
Táblaértékű paraméterek használata Paraméterek átadása TABLE tárolt eljárásoknak.
Tömeges másolás használata a JDBC-illesztővel Nagy áteresztőképességű beszúrás SQLServerBulkCopy használatával.
Tömeges másolási API kötegelt beszúráshoz Gyorsítsa fel a executeBatch a INSERT számítási feladatokhoz.
Kötegelt műveletek végrehajtása Batch-beszúrások, -frissítések és -törlések.

Adattípusok

Cikk Description
Adattípusok használata Java típusok leképezése SQL Server típusokra.
A JDBC-illesztőprogram adattípusainak ismertetése Illesztőprogram-típusrendszer és JDBC-leképezések.
Adattípus-átalakítások Implicit és explicit konverziók Java és SQL Server között.
Adattípus-különbségek Szélső esetek a típusok határon átnyúló megfeleltetésekor.
JSON-adattípus JSON-oszlopok tárolása és lekérdezése.
Térbeli adattípusok Használja a Java nyelvből származó geometry és geography elemeket.
Vektor adattípus A SQL Server vektortípussal végzett munka.
sql_variant sql_variant oszlopok olvasása és írása.
Felhasználó által definiált típusok CLR felhasználó által definiált típusok használata Java-ból
Nemzeti karakterkészlet támogatása Unicode-kezelés és nvarchar oszlopok.
Nemzetközi funkciók Területi, rendezési és globalizációs szempontok.

Tranzakciók és egyidejűség

Cikk Description
Tranzakciók végrehajtása commit, rollback és az automatikus véglegesítés szemantikája.
A tranzakciók ismertetése Tranzakciós életciklus és ajánlott eljárások.
Elkülönítési szintek Pillanatkép, lekötött olvasás, szerializálható és mások.
Párhuzamosság-kezelés Optimista és pesszimista párhuzamossági stratégiák.
Sorzárolás Hogyan zárolja az SQL Server a sorokat, és hogyan oldja fel a zárolásokat.
Mentési pontok használata Részleges visszaállítás egy tranzakción belül.
Tranzakcióméret kezelése A tranzakció hatókörének finomhangolása a hosszan futó zárolások elkerülése érdekében.
XA-tranzakciók Kétfázisú commit a(z) SQLServerXADataSource használatával.

Teljesítmény és megbízhatóság

Cikk Description
A teljesítmény és a megbízhatóság javítása Index, lekérdezés és illesztőprogram-szintű hangolás.
Előkészített utasítás metaadatainak gyorsítótárazása Az előkészített utasításcsomagok újrafelhasználása.
Előkészített utasításparaméter teljesítménye A paraméter beírása és a végrehajtási terv újbóli felhasználása.
Adaptív pufferelés Streamelje a nagy oszlopokat anélkül, hogy teljes mértékben betölti őket a memóriába.
Objektumok bezárása használaton túl Ingyenes Statement, ResultSetés Connection erőforrások azonnal.
Magas rendelkezésre állás és vészhelyreállítás A rendelkezésre állási csoport figyelői és a többalhálózatos feladatátvétel.
Adatbázis-tükrözés Használja az illesztőt adatbázis-tükrözési partnerekkel.

Diagnosztizálás és hibaelhárítás

Cikk Description
A JDBC-illesztővel kapcsolatos problémák diagnosztizálása Nyomkövetési, naplózási és gyakori hibamódok.
Kapcsolódási hibák elhárítása Csatlakozási hibák, TLS-kapcsolatfelépítési hibák és elnevezett példányok.
Az illesztőprogram működésének nyomon követése Engedélyezze a JDK-naplózást az illesztőprogram számára.
Teljesítménynaplózó és visszahívás Kimutatásonkénti teljesítménymetrikák rögzítése.
Bővített eseménynapló Korrelálja az ügyfélhibákat a kiszolgálóoldali kiterjesztett eseményekkel.
A hibák kezelése SQLException, hibakódok és újrapróbálkozások tippjei.
Cikk Description
Kiadási megjegyzések Verzióelőzmények és az egyes kiadások újdonságai.
Funkciófüggőségek Választható függőségek Entra ID, Kerberos, Always Encrypted és mások számára.
JDBC 4.3-megfelelőség JDBC 4.3 API-megfelelőség.
JDBC 4.2-megfelelőség JDBC 4.2 API-megfelelőség.
JDBC 4.1-megfelelőség JDBC 4.1 API-megfelelőség.
Megfelelőség és jogi Specifikációk megfelelősége és licencelése.
JDBC-illesztőprogram API-referenciája Az illesztőprogram által közzétett osztályok, felületek, metódusok és mezők.
JDBC-illesztőalkalmazások mintája Teljes körű kódminták.
FAQ Gyakori kérdések.