Estou tentando adicionar um JSP habilitado para banco de dados a um aplicativo Tomcat 5.5 existente (GeoServer 2.0.0, se isso ajudar).
O próprio aplicativo se comunica perfeitamente com o Postgres, então eu sei que o banco de dados está ativo, o usuário pode acessá-lo, todas essas coisas boas. O que estou tentando fazer é uma consulta de banco de dados em um JSP que adicionei. Eu usei o exemplo de configuração no exemplo da fonte de dados Tomcat praticamente pronto para uso. Os taglibs necessários estão no lugar certo - nenhum erro ocorrerá se eu tiver apenas os refs do taglib, então é encontrar esses JARs. O driver jdbc postgres, postgresql-8.4.701.jdbc3.jar está em $ CATALINA_HOME / common / lib.
Aqui está o topo do JSP:
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/mmas">
select current_validstart as ValidTime from runoff_forecast_valid_time
</sql:query>
A seção relevante de $ CATALINA_HOME / conf / server.xml, dentro do <Host>
que por sua vez está dentro de <Engine>
:
<Context path="/gs2" allowLinking="true">
<Resource name="jdbc/mmas" type="javax.sql.Datasource"
auth="Container" driverClassName="org.postgresql.Driver"
maxActive="100" maxIdle="30" maxWait="10000"
username="mmas" password="very_secure_yess_precious!"
url="jdbc:postgresql//localhost:5432/mmas" />
</Context>
Estas linhas são as últimas na tag em webapps / gs2 / WEB-INF / web.xml:
<resource-ref>
<description>
The database resource for the MMAS PostGIS database
</description>
<res-ref-name>
jdbc/mmas
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
Finalmente, a exceção:
exception
org.apache.jasper.JasperException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver"
[...wads of ensuing goo elided]
fonte
Respostas:
Essa exceção pode ter basicamente duas causas:
1. O driver JDBC não está carregado
Você precisa garantir que o driver JDBC seja colocado na própria
/lib
pasta do servidor .Ou, quando você realmente não está usando uma fonte de dados de pool de conexão gerenciada pelo servidor, mas está mexendo manualmente
DriverManager#getConnection()
no WAR, você precisa colocar o driver JDBC no WAR/WEB-INF/lib
e executar... em seu código antes da primeira
DriverManager#getConnection()
chamada, por meio da qual você se certifica de não engolir / ignorar qualquer coisaClassNotFoundException
que possa ser gerada por ela e continuar o fluxo de código como se nada de excepcional tivesse acontecido. Consulte também Onde devo colocar o driver JDBC para o pool de conexão do Tomcat?2. Ou o URL JDBC está na sintaxe errada
Você precisa se certificar de que o URL JDBC está em conformidade com a documentação do driver JDBC e lembre-se de que geralmente diferencia maiúsculas de minúsculas. Quando o URL JDBC não retorna
true
paraDriver#acceptsURL()
nenhum dos drivers carregados, você também obterá exatamente esta exceção.No caso do PostgreSQL, ele é documentado aqui .
No caso do MySQL, ele está documentado aqui .
No caso do Oracle, ele está documentado aqui .
Veja também:
fonte
Esse URL parece errado. Você precisa do seguinte?
fonte
Esqueci de adicionar o driver JDBC PostgreSQL ao meu projeto ( Mvnrepository ).
Gradle :
Maven :
Você também pode baixar o JAR e importar para o seu projeto manualmente.
fonte
Eu enfrentei um problema semelhante. Meu projeto no contexto é Dynamic Web Project (Java 8 + Tomcat 8) e o erro é para exceção do driver PostgreSQL: Nenhum driver adequado encontrado
Foi resolvido adicionando
Class.forName("org.postgresql.Driver")
antes de chamar ogetConnection()
métodoAqui está meu código de amostra:
try { Connection conn = null; Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection("jdbc:postgresql://" + host + ":" + port + "/?preferQueryMode=" + sql_auth,sql_user , sql_password); } catch (Exception e) { System.out.println("Failed to create JDBC db connection " + e.toString() + e.getMessage()); }
fonte
Achei a dica a seguir útil para eliminar esse problema no Tomcat -
certifique-se de carregar o driver primeiro fazendo um Class.forName ("org.postgresql.Driver"); em seu código.
Isso é da postagem - https://www.postgresql.org/message-id/[email protected]
O código jdbc funcionou bem como um programa autônomo, mas, no TOMCAT, apresentou o erro -'Nenhum driver adequado encontrado '
fonte
É importante observar que isso também pode ocorrer quando o Windows bloqueia downloads que ele considera inseguros. Isso pode ser resolvido clicando com o botão direito do mouse no arquivo jar (como ojdbc7.jar) e marcando a caixa 'Desbloquear' na parte inferior.
Caixa de diálogo de propriedades do arquivo JAR do Windows :
fonte
Além de adicionar o conector JDBC do MySQL, certifique-se de que o context.xml (se não estiver descompactado na pasta Tomcat webapps) com suas definições de conexão de banco de dados esteja incluído no diretório Tomcats conf.
fonte
Um erro muito bobo que poderia resultar é adicionar espaço no início da conexão de URL JDBC.
O que eu quero dizer é:-
Suponha que você cometeu um erro ao fornecer o URL jdbc como
(Observe que há um espaço no início da url, isso causará o erro)
a maneira correta deve ser:
(Observe que não há espaço no início, você pode dar espaço no final do url, mas é seguro não fazê-lo)
fonte
Eu estava usando o jruby, no meu caso criei em config / initializers
postgres_driver.rb
ou onde quer que esteja o seu motorista, e pronto!
fonte
Tive exatamente esse problema ao desenvolver um aplicativo Spring Boot em STS, mas, no final das contas, ao implantar o war empacotado no WebSphere (v.9). Com base nas respostas anteriores, minha situação era única. ojdbc8.jar estava em minha pasta WEB-INF / lib com o carregamento de classe Parent Last definido, mas sempre diz que falhou ao encontrar o driver adequado.
Meu problema final era que eu estava usando a classe DataSource incorreta porque estava apenas acompanhando tutoriais / exemplos online. Encontrou a dica graças ao comentário de David Dai sobre sua própria pergunta aqui: Spring JDBC Não foi possível carregar a classe de driver JDBC [oracle.jdbc.driver.OracleDriver]
Mais tarde, também encontrei o exemplo do Spring Guru com o driver específico da Oracle: https://springframework.guru/configuring-spring-boot-for-oracle/
Exemplo que gera erro usando com
org.springframework.jdbc.datasource.DriverManagerDataSource
base em exemplos genéricos.E o exapmle corrigido usando um
oracle.jdbc.pool.OracleDataSource
:@Config @EnableTransactionManagement public class appDataConfig { /* Other Bean Defs */ @Bean public DataSource dataSource() { // configure and return the necessary JDBC DataSource OracleDataSource datasource = null; try { datasource = new OracleDataSource(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } datasource.setURL("jdbc:oracle:thin:@//HOST:PORT/SID"); datasource.setUser("user"); datasource.setPassword("password"); return datasource; } }
fonte
Eu estava tendo o mesmo problema com a fonte de dados mysql usando dados de primavera que funcionariam fora, mas me deu este erro quando implantado no tomcat.
O erro desapareceu quando adicionei o driver jar mysql-connector-java-8.0.16.jar à pasta jres lib / ext
Porém, não queria fazer isso na produção por medo de interferir em outros aplicativos. A definição de clareza da classe do driver resolveu esse problema para mim
fonte
Execute
java
comCLASSPATH
a variável ambiental apontando para o arquivo JAR do driver, por exemploOnde
drivers/mssql-jdbc-6.2.1.jre8.jar
está o caminho para o arquivo do driver (por exemplo, JDBC para SQL Server ).Este
ConnectURL
é o aplicativo de amostra desse driver (samples/connections/ConnectURL.java
), compilado por meio dejavac ConnectURL.java
.fonte
No meu caso, eu estava trabalhando em um projeto Java com Maven e encontrei este erro. Em seu arquivo pom.xml, certifique-se de ter essas dependências
e onde você cria conexão tem algo assim
fonte
Class.forName
.DriverManager
deve ser capaz de encontrá-lo.Você obterá o mesmo erro se não houver uma definição de Recurso fornecida em algum lugar para seu aplicativo - provavelmente no context.xml central ou no arquivo de contexto individual em conf / Catalina / localhost. E se estiver usando arquivos de contexto individuais, tome cuidado para que o Tomcat os exclua livremente sempre que você remover / desimplantar o arquivo .war correspondente.
fonte
Não importa quantos anos este tópico se torne, as pessoas continuarão a enfrentar esse problema.
Meu caso: Eu tenho a configuração mais recente (no momento da postagem) do OpenJDK e do maven. Eu tentei todos os métodos fornecidos acima, sem maven e até mesmo soluções em publicações irmãs no StackOverflow. Não estou usando nenhum IDE ou qualquer outra coisa, executando a partir de CLI nua para demonstrar apenas a lógica principal.
Aqui está o que finalmente funcionou.
Class.forName(....)
. O arquivo que queremos é ocom/mysql/jdbc/Driver.class
java --module-path com/mysql/jdbc -cp ./ App
Isso carregaria o pacote (extraído) manualmente e seu programa java encontraria a classe de driver necessária.
mysql
driver; outros drivers podem exigir pequenas alterações..deb
imagem, você pode obter o frasco em/usr/share/java/your-vendor-file-here.jar
fonte
Encontrei esse problema inserindo um arquivo XML
src/main/resources
incorretamente, excluí-o e tudo voltou ao normal.fonte