La famigerata java.sql.SQLException:nessun driver adatto trovato
Questa eccezione può avere fondamentalmente due cause:
# 1. Il driver JDBC non è caricato
È necessario assicurarsi che il driver JDBC sia posizionato nel /lib
del server cartella.
Oppure, quando in realtà non stai utilizzando un'origine dati del pool di connessioni gestita dal server, ma stai manualmente armeggiando con DriverManager#getConnection()
in WAR, devi inserire il driver JDBC in /WEB-INF/lib
di WAR ed eseguire ..
Class.forName("com.example.jdbc.Driver");
.. nel tuo codice prima il primo DriverManager#getConnection()
chiamata per cui ti assicuri di non ingoia/ignora qualsiasi ClassNotFoundException
che può essere lanciato da esso e continuare il flusso del codice come se non fosse successo nulla di eccezionale. Vedi anche Dove devo posizionare il driver JDBC per il pool di connessioni di Tomcat?
#2. Oppure, l'URL JDBC ha una sintassi errata
È necessario assicurarsi che l'URL JDBC sia conforme alla documentazione del driver JDBC e tenere presente che di solito fa distinzione tra maiuscole e minuscole. Quando l'URL JDBC non restituisce true
per Driver#acceptsURL()
per uno qualsiasi dei driver caricati, otterrai anche esattamente questa eccezione.
In caso di PostgreSQL è documentato qui.
Con JDBC, un database è rappresentato da un URL (Uniform Resource Locator). Con PostgreSQL™, questo assume una delle seguenti forme:
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
In caso di MySQL è documentato qui.
Il formato generale per un URL JDBC per la connessione a un server MySQL è il seguente, con elementi tra parentesi quadre ([ ]
) essendo facoltativo:
jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]
In caso di Oracle è documentato qui.
Ci sono 2 sintassi URL, la vecchia sintassi che funzionerà solo con SID e quella nuova con il nome del servizio Oracle.
Vecchia sintassi jdbc:oracle:thin:@[HOST][:PORT]:SID
Nuova sintassi jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
###Vedi anche:
- Dove devo posizionare il driver JDBC per il pool di connessioni di Tomcat?
- Come installare il driver JDBC nel progetto web Eclipse senza dover affrontare java.lang.ClassNotFoundexception
- Come devo connettermi al database/origine dati JDBC in un'applicazione basata su servlet?
- Qual è la differenza tra "Class.forName()" e "Class.forName().newInstance()"?
- Collega Java a un database MySQL