SQL Server için Microsoft JDBC sürücüsü

JDBC sürücüsünü indirin

SQL Server için Microsoft Java Veritabanı Bağlantısı (JDBC) Sürücüsü, herhangi bir Java uygulamasının veya uygulama sunucusunun Microsoft SQL'e bağlanmasını sağlayan bir Tip 4 JDBC sürücüsüdür (saf Java, SQL Server TDS protokolünü doğrudan konuşur, yerel kütüphanelere gerek yoktur) Database Engine Azure SQL Veritabanı'de, SQL veritabanı Fabric, Azure SQL Yönetilen Örneği'de ve SQL Server'in tüm desteklenen sürümlerinde (Express Editions dahil) mevcuttur. Standart JDBC API'lerini uygular ve IBM WebSphere ve SAP NetWeaver gibi büyük Java uygulama sunucularıyla çalışır.

Başlangıç noktanızı seçin

Azure SQL için üretim temeli

Bu kod parçacığını üretim odaklı Azure SQL bağlantısı için başlangıç noktası olarak kullanın. Azure App Service uygulama ayarları, ortam değişkenleri veya yapılandırma dosyası gibi uygulama yapılandırmasından sunucu adını ve veritabanı adını yükler ve bağlantı özelliklerinin geri kalanını program aracılığıyla ayarlar. Yapılandırma, Taşıma Katmanı Güvenliği’ni (TLS), yönetilen kimliği, geçici hatalarda bağlantının yeniden denenmesini, yük devretme grubunun hızlı kurtarılmasını, soğuk başlatmalı bir yük devretmeyi kapsayacak kadar uzun bir oturum açma zaman aşımını ve Azure SQL kısıtlaması veya sorgu sırasında gerçekleşen yük devretme ile karşılaşan ifadeler için yapılandırılabilir yeniden deneme mantığını (CRL) bir araya getirir.

Daha yüksek güvenlik ve daha kolay ölçek genişletme için bağlantı bilgilerini kodunuzun dışında tutun. Üretimde bağlantı bilgilerini uygulamanızın yapılandırma sisteminde depolayın ve hassas değerler ve merkezi olarak yönetilen bağlantı ayarları için Azure Key Vault kullanın. Daha fazla bilgi için bkz . Bağlantı dizelerinin güvenliğini sağlama.

Bu makaledeki Java kod parçacıklarında, kısalık amacıyla import ifadelerine ve sınıf tanımlarına yer verilmemiştir.

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

Bu kod parçacığı, Azure SQL Veritabanı yük devretme grupları ve Azure SQL Yönetilen Örneği için ayarlanmıştır.

Yalnızca bir yük devretme grubu dinleyicisine, kullanılabilirlik grubu dinleyicisine veya yük devretme kümesi örneği uç noktasına bağlandığınızda multiSubnetFailover=true ayarlayın. Bu özelliğin yüksek kullanılabilirlik (HA) dinleyicileri olmayan uç noktalarda kullanılması performansı etkileyebilir ve desteklenmez. Daha fazla bilgi için bkz. Yüksek Kullanılabilirlik, olağanüstü durum kurtarma için JDBC sürücü desteği.

Kod parçacığı, retryConn ve connectRetryCount tarafından kontrol edilen varsayılan davranış kapsamında, sürücü en yaygın Azure SQL geçici bağlantı hatalarını (4060, 40197, 40501, 40613, 49918, 49919, 49920, 10928 ve 10929 dahil) zaten yeniden denediği için connectRetryInterval değerini ayarlamaz. Tam liste için bkz . Yerleşik geçici bağlantı hata listesi. retryConn ile +<errorNumber> yalnızca listeyi zaten kapsanmayan bir hatayla genişletmeniz gerektiğinde ekleyin veya değiştirmek için bunu <errorNumber> olarak ayarlayın (+ ile başlamadan). Aynı değeri bir JDBC URL'sine yerleştirirseniz, bunu retryConn={+<errorNumber>} veya retryConn={<errorNumber>} ile sarın.

retryExec özelliği iki bölümden oluşur; programatik olarak ayarladığınızda rule1;rule2 şeklinde yazılır. Bir JDBC URL’sinde aynı değeri belirtirseniz, her kuralı {rule1};{rule2}gösterildiği gibi süslü parantez içine alın:

  • {1205,1222:3,5+5}, kilitlenme kurbanlarını (1205) ve kilit isteği zaman aşımlarını (1222) 5, 10 ve 15 saniyelik doğrusal aralıklarla üç kez yeniden dener. 1205 için SQL Server, sürücü hatayı görmeden önce işlemi geri alır, bu nedenle tek bir deyimi yeniden çalıştırmak güvenlidir. Kilitlenmeye giren ifade, birden çok ifadeden oluşan bir işlemin parçasıysa önceki ifadeler de geri alınır ve CRL bunları yeniden yürütmez; bu yüzden işlemin tamamını kendi yeniden deneme döngünüzün içine alın. 1222 işlemi açık bırakır ve deyim düzeyindeki yeniden deneme yalnızca orijinal işlem içindeki deyimi yeniden çalıştırır; işlem süresini de sınırlamanız gerekiyorsa, tüm işlemi kendi yeniden deneme döngünüzün içine alın.

  • {40501,40613,40197,10928,10929,49918:4,5*2} Azure SQL’deki kısıtlama, sorgu sırasında yük devretme ve kaynak sınırı hatalarını 5, 10, 20 ve 40 saniyelik üssel geri çekilme ile dört kez yeniden dener. Bu hatalar, connect döngüsü için yerleşik geçici hata listesinde bulunur; ancak kurulmuş bir bağlantı üzerinde sorgunun ortasında ortaya çıktıklarında bunları yakalayan şey retryExec öğesidir. CRL geri çekilme süreleri queryTimeout ile sınırlıdır. Bir sonraki planlı beklemeden daha düşük bir süre ayarlarsanız queryTimeout , sürücü erken pes eder ve yeniden çatır. CRL bekleme sürelerinizin toplamı ile ifade çalıştırma süresinin toplamı kadar büyük veya daha büyük bir queryTimeout seçin ya da en uzun geri çekilme sürelerinin devreye girmeyeceğini kabul edin.

Azure SQL Veritabanı yük devretme grupları, Hyperscale adlandırılmış çoğaltmaları ve okuma ölçeğini genişletme ya da Always On kullanılabilirlik grubu dinleyicileri için, okunabilir bir ikincil sunucuya bağlanmak istediğinizde applicationIntent=ReadOnly değerini ayarlayın. Sertifikanın Özne Alternatif Adı (SAN), bağlandığınız ana bilgisayarı içermeyen egemen bulutlarda, eşleşmesi için hostNameInCertificate değerini de ayarlayın (örneğin, Azure Kamu için *.database.usgovcloudapi.net).

Bu yapılandırmanın her bölümü hakkında daha fazla bilgi için bkz:

Azure SQL geçici hataların kataloğu için bkz. Geçici bağlantı hatalarını giderme.

Temel özellikler

  • Standartlara dayalı JDBC: Tür 4 sürücüsü. JRE 11+ derlemesi, JDBC 4.2 ve JDBC 4.3 istek sınırı yöntemlerini (beginRequest, endRequest) uygular ve Statement yardımcılardan alıntı yapar. JDBC 4.3 parçalama API'leri (setShardingKey, createConnectionBuilder ailesi) SQLFeatureNotSupportedException fırlatır. JRE 8 derlemesi JDBC 4.2'yi uygular. Sürüm başına döküm ve desteklenen ve desteklenmeyen 4.3 yöntemlerinin tam listesi için bkz. Java ve JDBC belirtimi desteği.
  • Geniş platform desteği: Windows, Linux ve macOS dahil olmak üzere desteklenen Java Sanal Makinesine (JVM) sahip tüm platformlarda çalışır.
  • Varsayılan olarak şifrelenir: Geçerli sürücüler için varsayılan olarak ile encrypt=true TLS ile şifrelenmiş bağlantılar.
  • Microsoft Entra ID kimlik doğrulaması: Yönetilen kimlik, hizmet sorumlusu, etkileşimli, tümleşik, varsayılan kimlik bilgisi zinciri ve erişim belirteci akışları ile parolasız bağlantılar.
  • Kerberos: şirket içi Active Directory için tümleşik kimlik doğrulaması.
  • NTLM: Etki alanına bağlı olmayan veya eski senaryolar için Windows sınama/yanıt kimlik doğrulaması.
  • Always Encrypted: Hassas sütunlar için istemci tarafı şifreleme; yerinde işlemler için isteğe bağlı güvenli enklavlarla.
  • Toplu kopyalama: SQLServerBulkCopy API ile yüksek verimli eklemeler ve executeBatch için toplu ekleme performansı.
  • Bağlantı dayanıklılığı: Geçici hatalar için yerleşik bağlantı yeniden deneme mekanizmasına ek olarak, ifadeler (retryExec) için isteğe bağlı olarak yapılandırılabilen yeniden deneme mantığı ve özelleştirilebilir bir bağlantı hata listesi (retryConn).
  • Zengin SQL Server veri türü desteği: datetimeoffset, sql_variant, JSON, uzamsal, vektör, tablo değerli parametreler ve kullanıcı tanımlı türler.

Başlayın

Article Description
Sistem gereksinimleri Desteklenen Java, işletim sistemi ve SQL Server sürümleri.
Destek matrisi JDBC sürücü sürümleri için ayrıntılı uyumluluk matrisi.
SQL Server için Microsoft JDBC Sürücüsünü İndirme Bağlantıları, Maven koordinatlarını ve yayın yapıtlarını indirin.
JDBC sürücüsünü kullanmaya başlama Sürücüyü yükleyin, ortamınızı yapılandırın ve ilk sorgunuzu çalıştırın.
JDBC sürücüsüne genel bakış Mimari, desteklenen özellikler ve JDBC belirtimi uyumluluğu.

Yapılandırma ve bağlanma

Article Description
JDBC sürücüsüyle SQL Server'a bağlanma Java'dan bir SQL Server örneğine bağlantı kurun.
Azure SQL veritabanına bağlanma bir Java uygulamasını Azure SQL Veritabanı bağlayın.
Bağlantı URL'sini oluşturma jdbc:sqlserver:// URL söz dizimi ve özellikleri için tam referans.
Bağlantı özelliklerini ayarlama Tüm bağlantı özellikleri, varsayılanlar ve bunların nasıl ayarlanacağı.
Veri kaynağı özelliklerini ayarlama SQLServerDataSource öğesini JNDI ve uygulama sunucularıyla kullanmak üzere yapılandırın.
Bağlantı ile çalışmak Bağlantıları doğru bir şekilde açın, yeniden kullanabilir ve kapatabilirsiniz.
Bağlantı havuzunu kullanma JNDI veri kaynakları ve harici havuzlarla entegrasyon.
Bağlantı dayanıklılığı Yerleşik bağlantı yeniden denemeleri ve bozuk bağlantı algılama.
Yapılandırılabilir yeniden deneme mantığı Başarısız ifadeleri retryExec ile yeniden deneyin ve bağlantı yeniden deneme listesini retryConn ile özelleştirin.
JDBC sürücüsündeki zaman aşımı özelliklerini anlama loginTimeout, queryTimeout, soket zaman aşımları ve bunların nasıl etkileştiği.
JDBC sürücüsünü dağıtma Sürücüyü uygulamanızla birlikte paketleyin ve dağıtın.

Authenticate

Article Description
Microsoft Entra kimlik doğrulama Yönetilen kimlik, hizmet sorumlusu, etkileşimli, tümleşik ve erişim belirteci kimlik doğrulaması.
Kerberos tümleşik kimlik doğrulaması Kerberos ve Active Directory ile bağlanın.
NTLM kimlik doğrulaması Kimlik doğrulaması için NTLM kimlik bilgilerini kullanın.
Geri döngü senaryoları için istemci sertifikası kimlik doğrulaması Geri döngü bağlantılarında sertifikalarla istemcilerin kimliğini doğrulama.

Secure

Article Description
JDBC sürücü uygulamalarının güvenliğini sağlama Sürücüyü kullanan Java uygulamaları için güvenlik kılavuzu.
Uygulama güvenliği Tehdit modeli ve derinlemesine savunma önerileri.
Bağlantı dizelerinin güvenliğini sağlama Kimlik bilgilerini ve bağlantı dizelerini kaynaktan uzak tutun.
İstemciyi şifreleme için yapılandırma Güven kökleri, sertifika sabitleme ve TLS ayarları.
Şifreleme ile bağlanma encrypt=true zorunlu kılın ve sunucu sertifikasını doğrulayın.
Şifreleme desteğini anlama Sürücünün SQL Server ile TLS anlaşması yapma şekli.
Kullanıcı girişini doğrulama SQL'i parametreleştirin ve eklemeden kaçının.
FIPS modu Sürücüyü FIPS uyumlu ortamlarda çalıştırın.
Her Zaman Şifreli Hassas sütunlar için istemci tarafı şifrelemesini yapılandırın.
Her Zaman Şifreli ile güvenli enklavlar Şifrelenmiş sütunlarda zengin işlemleri etkinleştirin.
Always Encrypted API başvurusu Sütun şifreleme sağlayıcıları ve anahtar depoları için API yüzeyi.

Verilerle çalışma

Article Description
İfadeler ve sonuç kümeleriyle çalışma Statement, PreparedStatement ve sonuç kümelerinin temelleri.
JDBC sürücüsüyle komutları kullanma Parametreli ve parametresiz deyimleri çalıştırın.
Karmaşık deyimleri işleme Saklı yordamlar, birden çok sonuç ve güncelleştirme sayıları.
Sonuç kümeleriyle çalışma Sorgu sonuçlarını yineleyin, güncelleştirin ve kaydırın.
Birden çok sonuç kümesi kullanma Birden fazla sonuç kümesi döndüren sorguları işleyebilir.
İmleç türlerini anlama Yalnızca ileri yönlü, kaydırılabilir ve güncellenebilir imleçler.
Tablo değerli parametreleri kullanma TABLE Parametreleri saklı yordamlarına geçirin.
JDBC sürücüsüyle toplu kopyalama kullanma SQLServerBulkCopy ile yüksek işlem hacimli eklemeler.
Toplu ekleme için toplu kopyalama API'si İş yükleri için executeBatch hızlandırınINSERT.
Toplu işlem gerçekleştirme Toplu eklemeler, güncelleştirmeler ve silmeler.

Veri türleri

Article Description
Veri türleriyle çalışma Java türlerini SQL Server türlere eşleyin.
JDBC sürücüsü veri türlerini anlama Sürücü türü sistemi ve JDBC eşlemeleri.
Veri türü dönüştürmeleri Java ile SQL Server arasında örtük ve açık dönüştürmeler.
Veri türü farklılıkları Türleri sınırın ötesine eşlerken karşılaşılan uç durumlar.
JSON veri türü JSON sütunlarını depolayın ve sorgulayın.
Uzamsal veri türleri Java'dan geometri ve coğrafya kullanın.
Vektör veri türü SQL Server vektör türüyle çalışın.
sql_variant sql_variant sütunlarını okuma ve yazma.
Kullanıcı tanımlı türler Java'dan CLR kullanıcı tanımlı türlerini kullanın.
Ulusal karakter kümesi desteği Unicode işleme ve nvarchar sütunları.
Uluslararası özellikler Yerel ayar, harmanlama ve genelleştirmeyle ilgili dikkat edilmesi gerekenler.

İşlemler ve eşzamanlılık

Article Description
İşlem gerçekleştirme commit, rollback ve otomatik kaydetme anlam bilgisi.
İşlemleri anlama İşlem yaşam döngüsü ve en iyi yöntemler.
Yalıtım düzeyleri Anlık görüntü, okunmuş veriyi onaylayan, serileştirilebilir ve diğerleri.
Eşzamanlılık denetimi İyimser ve kötümser eşzamanlılık stratejileri.
Satır kilitleme SQL Server satır kilitlerini nasıl alır ve serbest bırakır?
Saklama noktalarını kullanma Bir işlem içinde kısmi geri alma.
İşlem boyutunu yönetme Uzun süre çalışan kilitlerden kaçınmak için işlem kapsamını ayarlayın.
XA işlemleri SQLServerXADataSource ile iki aşamalı taahhüt.

Performans ve güvenilirlik

Article Description
Performansı ve güvenilirliği artırma Dizin, sorgu ve sürücü düzeyinde ayarlama.
Hazırlanmış deyim meta verileri önbelleğe alma Hazırlanmış ifade planlarını yeniden kullanın.
Hazırlanmış ifade parametresi performansı Parametre yazma ve yürütme planını yeniden kullanma.
Uyarlanabilir arabellekleme Büyük sütunları tamamen belleğe yüklemeden akışla aktarabilirsiniz.
Kullanılmadığında nesneleri kapatma Ücretsiz Statement, ResultSetve Connection kaynakları hemen kullanın.
Yüksek kullanılabilirlik ve olağanüstü durum kurtarma Kullanılabilirlik grubu dinleyicileri ve çoklu alt ağ yük devretmesi.
Veritabanı yansıtma Sürücüyü veritabanı yansıtma iş ortaklarıyla birlikte kullanın.

Tanılama ve sorun giderme

Article Description
JDBC sürücüsüyle ilgili sorunları tanılama İzleme, günlüğe kaydetme ve yaygın hata modları.
Bağlantı sorunlarını giderme Bağlantı hataları, TLS el sıkışma hataları ve adlandırılmış örnekler.
Sürücü işlemini izleme Sürücü için JDK günlüğünü etkinleştirin.
Performans günlüğü ve geri çağırım İfade başına performans metriklerini toplayın.
Genişletilmiş olay günlüğü İstemci hatalarını sunucu tarafındaki genişletilmiş olaylarla ilişkilendirin.
Hataları işleme SQLException, hata kodları ve yeniden deneme ipuçları.
Article Description
Sürüm notları Sürüm geçmişi ve her sürümdeki yenilikler.
Özellik bağımlılıkları Entra ID, Kerberos, Always Encrypted ve diğerleri için isteğe bağlı bağımlılıklar.
JDBC 4.3 uyumluluğu JDBC 4.3 API uyumluluğu.
JDBC 4.2 uyumluluğu JDBC 4.2 API uyumluluğu.
JDBC 4.1 uyumluluğu JDBC 4.1 API uyumluluğu.
Uyumluluk ve yasal Belirtim uyumluluğu ve lisanslama.
JDBC sürücü API'si başvurusu Sürücü tarafından kullanıma sunulan sınıflar, arabirimler, yöntemler ve alanlar.
Örnek JDBC sürücü uygulamaları Uçtan uca kod örnekleri.
SSS Sık sorulan sorular.