Salve,
nella mia web application, con Tomcat quando tento di connettermi a postgresql ricevo sempre l'errore
"No suitable driver found for jdbc:postgresql://localhost:5432/..."
Il codice che uso per connettermi, se provato in locale va benissimo, mentre mi da problemi quando provo su tomcat.
Quindi la stringa di connessione è corretta.
Questo è il codice che uso per connettermi
Connection conn = null;
PreparedStatement parametersStatement = null;
ResultSet rSet = null;
conn = DriverManager.getConnection(strConn);
Uso maven, per importare la libreria postgresql
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
Da quello che ho capito non riesce a "caricare/registrare" il driver. Cosa che dovrebbe fare automaticamente in questo punto DriverManager.getConnection(strConn); come ripostato dalla documentazione ufficiale di postgresql https://jdbc.postgresql.org/documentation/use/
"Applications do not need to explicitly load the org.postgresql.Driver class because the pgJDBC driver jar supports the Java Service Provider mechanism. The driver will be loaded by the JVM when the application connects to PostgreSQL® (as long as the driver’s jar file is on the classpath)."
Su tomcat nella cartella WEB-INF\lib è presente il driver ma non capisco perche fallisce la registrazione.
Se forzo la registrazione/caricamente del driver con
Class.forName("org.postgresql.Driver");
oppure con
DriverManager.registerDriver(new org.postgresql.Driver ());
Risolvo il problema di connessione ma ne sorge un'altro.
Tomcat inizia a spammare nella console un messaggio di warning, ovvero
WARNING [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [appname] registered the JDBC driver [org.postgresql.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Evidentemente non è la soluzione giusta quella di forzare la registrazione del driver.
Se copio manualmente il driver di postgresql nella cartella di tomcat/lib, la connessione avviene ma solo dopo che ho refreshato la pagina ma nella console di tomcat ho sempre il messaggio di warning.
Detto questo, dove sbaglio??
Ringrazio anticipatamente per l'aiuto.