java.sql.SQLException: No suitable driver found hatası, Java uygulamasının verdiğin JDBC URL'si için uygun bir JDBC sürücüsü bulamadığını gösterir. Bunun dört yaygın nedeni vardır: sürücü bağımlılığının eksik olması, bağlanılacak veritabanına uygun olmayan bir sürücünün seçilmesi, JDBC URL'sinin sürücü ya da veritabanı türüyle uyuşmaması ve sürücünün uygulamanın gerçek çalışma sınıf yolunda bulunmamasıdır.
Çözüm, yalnızca bağlantı koduna bakmak değildir. URL, sürücü ve çalışma sınıf yolu birlikte kontrol edilmelidir. Kod IDE içinde hatasız derlense bile uygulama çalıştırıldığında sürücü dosyası bulunamıyorsa aynı hata oluşabilir.
Java bu hatayı neden verir?
JDBC sürücüsünü, Java uygulaması ile veritabanı arasında çeviri yapan bir ara katman gibi düşünebilirsin. Java tarafında DriverManager bir bağlantı isteği alır, sürücü ise bu isteği ilgili veritabanının anlayacağı bağlantı işlemlerine dönüştürür. Uygun sürücü yoksa veya sürücü verilen bağlantı biçimini tanımıyorsa Java bağlantıyı başlatamaz.
Hatanın adı yanıltıcı olabilir: “suitable driver” ifadesi her zaman sürücü dosyasının tamamen eksik olduğu anlamına gelmez. Sürücü projede bulunuyor olabilir, ancak bağlantı URL'sindeki protokolü desteklemiyor olabilir. Örneğin URL'nin başındaki jdbc:<protokol>: bölümü, hangi tür sürücünün bağlantıyı ele alması gerektiğini belirler. Sürücü bu protokolü tanımıyorsa DriverManager onu uygun aday olarak değerlendirmez.
Bir başka önemli fark, derleme zamanı ile çalışma zamanıdır. IDE, kaynak kodundaki sınıfları ve eklenen kütüphaneleri tanıyabilir. Bu durum, uygulamanın paketlenirken veya komut satırından çalıştırılırken aynı kütüphanelere erişeceğini garanti etmez. Özellikle bağımlılığı yalnız IDE ayarlarından eklemek, ancak Maven ya da Gradle yapılandırmasına eklememek; ya da uygulamayı eksik JAR dosyalarıyla çalıştırmak bu hataya yol açabilir.
Bu nedenle sorunu teşhis ederken önce şu sırayı izle:
- Bağlantı URL'sinin
jdbc:ile başladığını ve hedef veritabanı türüne uygun protokolü kullandığını kontrol et. - Seçtiğin JDBC sürücüsünün bu URL biçimini desteklediğini doğrula.
- Sürücü bağımlılığının proje yapılandırmasında bulunduğunu incele.
- Uygulamanın gerçekten çalıştığı ortamda, sürücü JAR dosyasının sınıf yoluna eklendiğinden emin ol.
Eski örneklerde sürücü sınıfını Class.forName(...) ile elle yükleyen kodlar görebilirsin. Modern JDBC sürücüleri çoğu durumda otomatik yüklenebilir. Ancak otomatik yükleme, sürücünün çalışma sınıfında mevcut olması koşuluna bağlıdır. Sürücü bağımlılığı uygulamaya hiç ulaşmamışsa elle sınıf yüklemeye çalışmak temel sorunu çözmez.
JDBC URL'si, sürücü ve sınıf yolu nasıl birlikte çalışır?

Bir JDBC bağlantısının sağlıklı kurulması üç parçanın birbiriyle uyumuna bağlıdır: bağlantı URL'si, JDBC sürücüsü ve çalışma sınıf yolu. Bu üç parçadan biri eksik ya da uyumsuz olduğunda No suitable driver found hatası görülebilir.
1. JDBC URL'si bağlantının türünü tarif eder
JDBC URL'si genel olarak jdbc:<protokol>:<bağlantı-bilgisi> biçimindedir. İlk bölüm bunun bir JDBC bağlantısı olduğunu belirtir. Protokol bölümü hangi tür veritabanı bağlantısının istendiğini tanımlar. Son bölüm ise sunucu adresi, bağlantı noktası, veritabanı adı veya dosya konumu gibi ayrıntıları taşıyabilir.
URL yalnızca bir adres değildir. Aynı zamanda DriverManager için bir seçim bilgisidir. Java, kayıtlı sürücülere bu URL'yi iletir ve URL'yi anlayan bir sürücü bulmaya çalışır. Bu nedenle yanlış protokol yazımı, başka bir veritabanı türüne ait URL kullanımı veya URL'nin beklenen biçimden sapması sürücü seçimini engelleyebilir.
2. JDBC sürücüsü URL'yi tanıyıp bağlantıyı kurar
JDBC sürücüsü, belirli bağlantı türlerini destekleyen kütüphanedir. Sürücünün görevi yalnızca Java sınıflarını projeye eklemek değildir; URL'nin kendi desteklediği bağlantı biçiminde olup olmadığını da değerlendirmektir. URL ile sürücü eşleştiğinde sürücü, bağlantı isteğini işleyerek veritabanına ulaşmayı dener.
Bu aşamada hata alınıyorsa iki olasılığı birbirinden ayırmak gerekir. “Uygun sürücü bulunamadı” hatası, sürücü seçiminin yapılamadığını anlatır. Buna karşılık sürücü seçildikten sonra alınan ağ, kimlik doğrulama veya veritabanı bulunamadı hataları farklı bir aşamadaki sorunlara işaret eder. Bu ayrım, gereksiz yere kullanıcı adı, parola veya sunucu ayarlarını değiştirmeyi önler.
3. Çalışma sınıf yolu sürücüyü uygulamaya görünür kılar
Sınıf yolu, Java uygulamasının çalışırken hangi sınıfları ve kütüphaneleri bulabileceğini belirler. JDBC sürücüsünün JAR dosyası burada yer almıyorsa Java sürücüyü yükleyemez. Projede bağımlılık satırının görünmesi tek başına yeterli değildir; bağımlılığın derleme, test, paketleme ve uygulamayı başlatma aşamalarında doğru kapsamla taşınması gerekir.
Kısaca bağlantı zinciri şöyledir: URL bağlantının hangi türde olduğunu söyler, sürücü bu türü tanır ve sınıf yolu sürücünün çalışma anında erişilebilir olmasını sağlar. Teşhiste bu sırayı korumak, hatayı rastgele ayar değişiklikleriyle değil, nedenine göre çözmeyi kolaylaştırır.
Üç katmanlı karar ağacıyla hatayı sistematik teşhis et

java.sql.SQLException: No suitable driver found hatasını teşhis ederken en verimli sıra, önce çalışma zamanı sınıf yolunu, sonra bağımlılık yapılandırmasını, en son JDBC URL'sini kontrol etmektir. URL'yi değiştirmeye başlamadan önce sürücü JAR dosyasının uygulamanın gerçekten çalıştığı ortamda bulunup bulunmadığını doğrula.
- Çalışma zamanı sınıf yolunu kontrol et: Belirti, kodun derlenmesine rağmen uygulama çalışırken sürücünün bulunamamasıdır. Çalıştırma komutunun, paketlenmiş uygulamanın veya dağıtım klasörünün sınıf yolunda ilgili JDBC sürücüsü bulunuyor mu incele. Sürücü yalnızca IDE'nin proje ekranında görünüyorsa bu yeterli değildir. JAR dosyasını gerçek çalışma ortamına eklemek ya da uygulamayı bağımlılıklarıyla birlikte başlatmak gerekir.
- Bağımlılığın kapsamını ve modülünü doğrula: Belirti, sürücünün bir modülde tanımlı olmasına rağmen başka bir modülden çalışan uygulamada görünmemesidir. Maven veya Gradle dosyasında bağımlılığın uygulamayı başlatan modüle eklendiğini kontrol et.
test,testRuntimeOnlyya da yalnızca derleme sırasında kullanılan bir kapsam, ana uygulamanın çalışma zamanına sürücüyü taşımayabilir. Maven'de kapsam, bağımlılığın hangi sınıf yollarına ekleneceğini belirler. - URL, sürücü ve veritabanı uyumunu incele: Sürücü sınıf yolu üzerinde olduğu hâlde hata devam ediyorsa JDBC URL'sinin protokolünü kontrol et. URL'nin
jdbc:sonrasındaki bölümü, seçtiğin sürücünün tanıdığı biçimle ve hedef veritabanıyla uyumlu olmalıdır. Başka bir veritabanına ait URL'yi mevcut sürücüyle kullanmak, sürücünün bağlantı isteğini tanımamasına yol açabilir. - Çalıştırma ortamlarını karşılaştır: IDE içindeki çalıştırma yapılandırması, test süreci, komut satırı ve paketlenmiş uygulama aynı sınıf yolunu kullanmayabilir. IDE'de çalışan kodun, üretilen JAR veya dağıtım paketiyle de çalıştığını varsayma. Uygulamayı kullandığın gerçek komutla başlatıp sınıf yolu ve bağımlılık listesini ayrıca kontrol et.
Bu sırayı uygulamak, sorunun URL'de mi, bağımlılıkta mı, yoksa çalışma ortamında mı olduğunu ayırmayı kolaylaştırır. Java temel kavramlarını ayrıca ölçmek için ücretsiz Java bilgi testi kullanılabilir.
Maven ve Gradle bağımlılığını gerçek çalışma ortamında doğrula
Bir JDBC sürücüsünün IDE'de görünmesi, uygulamanın onu çalışma zamanında bulacağını tek başına göstermez. Bağımlılık doğru proje veya alt modülde tanımlanmalı, çalışma zamanı kapsamına girmeli ve uygulamanın gerçek başlatma biçimine taşınmalıdır.
Maven yapılandırması
Maven'de sürücü, uygulamayı çalıştıran modülün pom.xml dosyasındaki dependencies bölümüne eklenir. Aşağıdaki örnekte H2 için resmi koordinat kullanılır; sürüm değerini projenin kullandığı sürümle doldurmalısın.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
</dependency>
Kod yalnızca java.sql sınıflarını kullandığı için bu bağımlılıkta ayrıca kapsam belirtilmemesi, Maven'in varsayılan derleme ve çalışma zamanı kapsamını kullanır. Sürücüyü yalnızca testte kullanıyorsan test kapsamı yeterli olabilir, ancak ana uygulamayı çalıştırırken aynı bağımlılığı çalışma ortamına ayrıca taşıman gerekir. Maven'in çözdüğü bağımlılıkları ve sınıf yolu çıktısını mvn dependency:tree veya uygun bağımlılık sınıf yolu görevleriyle kontrol edebilirsin.
Gradle yapılandırması
Gradle Kotlin DSL kullanan bir projede, yalnızca çalışma zamanında gereken bir JDBC sürücüsü runtimeOnly ile tanımlanabilir:
repositories {
mavenCentral()
}
dependencies {
runtimeOnly("com.h2database:h2:${h2Version}")
}
Uygulama sürücünün kendi sınıflarını doğrudan derleme sırasında kullanıyorsa implementation tercih edilebilir. Yalnızca test sürecinde gereken sürücü için testRuntimeOnly kullanılır. Ana uygulamayı çalıştırırken runtimeOnly bağımlılığının runtimeClasspath içinde bulunduğunu doğrula. Gradle, çalışma sınıf yolunu ayrı bir yapılandırma olarak çözer; IDE'nin bağımlılığı göstermesi, her çalıştırma görevinin aynı yapılandırmayı kullandığı anlamına gelmez.
Eksik bağımlılığı küçük bir testle ayır
Aşağıdaki örnek, veritabanı sunucusu gerektirmeyen bellek içi H2 bağlantısını sınar. H2'nin bellek içi URL biçimi resmi belgelerde jdbc:h2:mem: olarak açıklanır.
import java.sql.Connection;
import java.sql.DriverManager;
public class JdbcSmokeTest {
public static void main(String[] args) throws Exception {
String url = "jdbc:h2:mem:demo";
try (Connection connection = DriverManager.getConnection(url)) {
System.out.println("Bağlantı kuruldu.");
}
}
}
H2 bağımlılığı çalışma sınıf yolundan çıkarıldığında aynı kod java.sql.SQLException: No suitable driver found hatasına düşebilir. Bağımlılık doğru modüle eklendiğinde ve uygulama onunla birlikte başlatıldığında beklenen çıktı Bağlantı kuruldu. olur. Bu test çalışıyor, gerçek veritabanı bağlantısı çalışmıyorsa sonraki adım URL ve bağlantı bilgilerinin uyumunu incelemektir.
URL uyumunu ve bağlantı bilgilerini güvenli biçimde kontrol et
JDBC URL'si yalnızca biçimsel olarak doğru görünmemeli, kullanılan sürücünün tanıdığı protokolü ve hedef çalışma ortamını da göstermelidir. Örneğin jdbc:<protokol>://<sunucu>:<port>/<veritabani> yapısındaki her bölüm, bağlantının farklı bir katmanını temsil eder.
| URL bölümü | Kontrol edilmesi gereken uyum | Tipik belirti | Düzeltme yönü |
|---|---|---|---|
jdbc:<protokol> |
Protokol, eklenen JDBC sürücüsü tarafından tanınıyor mu? | No suitable driver found veya benzeri sürücü hatası |
Sürücü belgelerindeki URL biçimiyle URL başlangıcını karşılaştır. |
| Sürücü bağımlılığı | Sürücü, bağlanılacak veritabanı türüyle uyumlu mu? | Uygun sürücü bulunamaması veya sürücünün yüklenememesi | Yanlış veritabanına ait bağımlılığı kaldırıp hedef sisteme uygun sürücüyü ekle. |
| Sunucu ve port | Adres ve port, uygulamanın çalıştığı ortamdan erişilebilir mi? | Bağlantı reddedildi, zaman aşımı veya ana bilgisayar bulunamadı | Yerel, test ve üretim ortamlarının bağlantı bilgilerini ayrı kontrol et. |
| Veritabanı adı | URL'deki ad, hedef ortamda kullanılan veritabanıyla eşleşiyor mu? | Veritabanı bulunamadı veya kimlik doğrulama başarısız oldu | Ortam yapılandırmasındaki veritabanı adını ve bağlantı parametrelerini doğrula. |
Teşhis sırasında şu sırayı izleyebilirsin: önce protokolü ve URL biçimini, sonra sürücünün hedef veritabanıyla uyumunu, son olarak sunucu, port ve veritabanı adını kontrol et. IDE içinde çalışan bir yapılandırmanın paketlenmiş uygulamada da bulunacağını varsayma; gerçek çalışma ortamındaki değişkenleri ayrıca doğrula.
Kullanıcı adı, parola, erişim anahtarı ve diğer bağlantı bilgilerini kaynak koda yazma. Ortam değişkenleri, çalışma zamanı gizli bilgi yönetimi veya sürüm kontrolü dışında tutulan yerel yapılandırma dosyaları kullan. Kalıcı JDBC sınıf yolu ve yapılandırma sorunlarını kişiye özel müfredatla ele almak için Java Özel Ders programı incelenebilir.
Bu kontroller, URL ile sürücü ve çalışma ortamı arasındaki uyumsuzluğu daha güvenli ve sistematik biçimde ayırmana yardımcı olur.