Neslavná výjimka java.sql.SQL:Nebyl nalezen žádný vhodný ovladač
Tato výjimka může mít v zásadě dvě příčiny:
#1. Ovladač JDBC není načten
Musíte zajistit, aby byl ovladač JDBC umístěn ve vlastním serveru /lib
složka.
Nebo když ve skutečnosti nepoužíváte zdroj dat fondu připojení spravovaný serverem, ale ručně si pohráváte s DriverManager#getConnection()
ve WAR, pak musíte umístit ovladač JDBC do /WEB-INF/lib
WAR a provést ..
Class.forName("com.example.jdbc.Driver");
.. ve vašem kódu před první DriverManager#getConnection()
zavolejte, čímž se ujistíte, že ne spolknout/ignorovat všechny ClassNotFoundException
kterou lze hodit a pokračovat v toku kódu, jako by se nic výjimečného nestalo. Viz také Kam musím umístit ovladač JDBC pro fond připojení Tomcat?
#2. Nebo JDBC URL má nesprávnou syntaxi
Musíte se ujistit, že adresa URL JDBC odpovídá dokumentaci ovladače JDBC a mít na paměti, že se obvykle rozlišují velká a malá písmena. Když adresa URL JDBC nevrátí true
pro Driver#acceptsURL()
pro kterýkoli z načtených ovladačů získáte také přesně tuto výjimku.
V případě PostgreSQL je to zdokumentováno zde.
S JDBC je databáze reprezentována URL (Uniform Resource Locator). S PostgreSQL™ to má jednu z následujících forem:
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
V případě MySQL je to zdokumentováno zde.
Obecný formát JDBC URL pro připojení k serveru MySQL je následující, s položkami v hranatých závorkách (
[ ]
) je nepovinné:
jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]
V případě Oracle je to zdokumentováno zde.
Existují 2 syntaxe URL, stará syntaxe, která bude fungovat pouze s SID, a nová s názvem služby Oracle.
Stará syntaxe
jdbc:oracle:thin:@[HOST][:PORT]:SID
Nová syntaxe
jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
###Viz také:
- Kam musím umístit ovladač JDBC pro fond připojení Tomcat?
- Jak nainstalovat ovladač JDBC do webového projektu Eclipse bez použití java.lang.ClassNotFoundexception
- Jak se mám připojit k databázi/zdroji dat JDBC v aplikaci založené na servletech?
- Jaký je rozdíl mezi „Class.forName()“ a „Class.forName().newInstance()“?
- Připojte Javu k databázi MySQL