PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La famigerata java.sql.SQLException:nessun driver adatto trovato

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