Den ökända java.sql.SQLException:Ingen lämplig drivrutin hittades
Detta undantag kan ha i princip två orsakar:
#1. JDBC-drivrutinen är inte laddad
Du måste se till att JDBC-drivrutinen är placerad i serverns egen /lib
mapp.
Eller, när du faktiskt inte använder en serverhanterad datakälla för anslutningspool, utan pysslar manuellt med DriverManager#getConnection()
i WAR måste du placera JDBC-drivrutinen i WAR:s /WEB-INF/lib
och utför ..
Class.forName("com.example.jdbc.Driver");
.. i din kod före den första DriverManager#getConnection()
samtal där du ser till att du inte gör det svälja/ignorera någon ClassNotFoundException
som kan kastas av den och fortsätta kodflödet som om inget exceptionellt hände. Se även Var måste jag placera JDBC-drivrutinen för Tomcats anslutningspool?
#2. Eller så har JDBC URL i fel syntax
Du måste se till att JDBC-URL:n överensstämmer med JDBC-drivrutinens dokumentation och kom ihåg att den vanligtvis är skiftlägeskänslig. När JDBC URL inte returnerar true
för Driver#acceptsURL()
för någon av de laddade drivrutinerna får du också exakt detta undantag.
Vid PostgreSQL det finns dokumenterat här.
Med JDBC representeras en databas av en URL (Uniform Resource Locator). Med PostgreSQL™ tar detta en av följande former:
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
I fallet med MySQL det finns dokumenterat här.
Det allmänna formatet för en JDBC-URL för att ansluta till en MySQL-server är följande, med objekt inom hakparenteser (
[ ]
) är valfritt:
jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]
I fallet med Oracle det finns dokumenterat här.
Det finns två URL-syntaxer, gammal syntax som bara fungerar med SID och den nya med Oracle-tjänstens namn.
Gammal syntax
jdbc:oracle:thin:@[HOST][:PORT]:SID
Ny syntax
jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
###Se även:
- Var måste jag placera JDBC-drivrutinen för Tomcats anslutningspool?
- Hur man installerar JDBC-drivrutinen i Eclipse webbprojekt utan att behöva möta java.lang.ClassNotFoundexception
- Hur ska jag ansluta till JDBC-databas/datakälla i en servletbaserad applikation?
- Vad är skillnaden mellan "Class.forName()" och "Class.forName().newInstance()"?
- Anslut Java till en MySQL-databas