java.sql找不到,臭名昭着的java.sql.SQLException:找不到合适的驱动程序

臭名昭着的java.sql.SQLException:找不到合适的驱动程序

我试图添加一个数据库启用的JSP到现有的Tomcat 5.5应用程序(GeoServer 2.0.0,如果有帮助的话)。

该应用程序本身与Postgres会谈很好,所以我知道数据库已经启动,用户可以访问它,所有这些好东西。 我想要做的是在我添加的JSP中的数据库查询。 我已经很好的使用了Tomcat数据源示例中的configuration示例。 必需的标签库位于正确的位置 – 如果我只有标签库引用,就不会出现错误,因此它正在查找这些JAR。 postgres jdbc驱动程序postgresql-8.4.701.jdbc3.jar位于$ CATALINA_HOME / common / lib中。

这是JSP的顶部:

select current_validstart as ValidTime from runoff_forecast_valid_time

$ CATALINA_HOME / conf / server.xml中的相关部分,在中又是在 :

这些行是webapps / gs2 / WEB-INF / web.xml中标记的最后一行:

The database resource for the MMAS PostGIS database jdbc/mmas javax.sql.DataSource Container

最后,例外:

exception org.apache.jasper.JasperException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver" [...wads of ensuing goo elided]

臭名昭着的java.sql.SQLException:找不到合适的驱动程序

这个例外可以有两个原因:

1. JDBC驱动程序未加载

您需要确保JDBC驱动程序放置在服务器自己的/lib文件夹中。

iNLWX.png

或者,如果您实际上不使用服务器pipe理的连接池数据源,而是手动摆弄WAR中的DriverManager#getConnection() ,则需要将JDBC驱动程序放在WAR的/WEB-INF/lib然后执行..

Class.forName("com.example.jdbc.Driver");

..在第一个DriverManager#getConnection()调用之前的代码中,确保您不会吞下/忽略任何可由其抛出的ClassNotFoundException ,并继续执行代码stream,就好像没有任何exception情况发生一样。 另请参见我必须在哪里放置用于Tomcat连接池的JDBC驱动程序?

2.或者,JDBC URL的语法错误

您需要确保JDBC URL符合JDBC驱动程序文档,并记住它通常区分大小写。 当JDBC URL没有为任何加载的驱动程序的Driver#acceptsURL()返回true ,那么你也会得到这个exception。

在PostgreSQL的情况下, 这里logging 。

在JDBC中,数据库由URL(统一资源定位符)表示。 使用PostgreSQL™,它采用以下forms之一:

jdbc:postgresql:database

jdbc:postgresql://host/database

jdbc:postgresql://host:port/database

在MySQL的情况下, 这里logging 。

用于连接到MySQL服务器的JDBC URL的一般格式如下,方括号( [ ] )中的项是可选的:

jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

在Oracle的情况下, 这里logging 。

有2个URL语法,旧的语法只能用于SID和新的Oracle服务名称。

旧的语法jdbc:oracle:thin:@[HOST][:PORT]:SID

新语法jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE

也可以看看:

我要在哪里放置用于Tomcat连接池的JDBC驱动程序?

如何在Eclipse Web项目中安装JDBC驱动程序而不面临java.lang.ClassNotFoundexception

我应该如何在基于servlet的应用程序中连接到JDBC数据库/数据源?

“Class.forName()”和“Class.forName()。newInstance()”有什么区别?

将Java连接到MySQL数据库

url="jdbc:postgresql//localhost:5432/mmas"

该url看起来不正确,你需要以下吗?

url="jdbc:postgresql://localhost:5432/mmas"

我正在使用jruby,在我的情况下我创buildconfig / initializers下

postgres_driver.rb

$CLASSPATH << '~/.rbenv/versions/jruby-1.7.17/lib/ruby/gems/shared/gems/jdbc-postgres-9.4.1200/lib/postgresql-9.4-1200.jdbc4.jar'

或者你的司机在哪里,就是这样!

值得注意的是,当Windows阻止它认为不安全的下载时,也可能发生这种情况。 这可以通过右键单击jar文件(如ojdbc7.jar)并选中底部的“Unblock”框来解决。

Windows JAR文件属性对话框 :

9swb8.png

除了添加MySQL JDBC连接器外,还要确保Tomcats conf目录中包含与您的数据库连接定义相关的context.xml(如果未解包到Tomcat webapps文件夹中)。

在STS中开发Spring Boot应用程序时,我有这个确切的问题,但最终将打包的war部署到WebSphere(v.9)。 根据以前的答案,我的情况是独特的。 ojdbc8.jar是在我的WEB-INF / lib文件夹中,父类最后一个加载集合,但总是说它找不到合适的驱动程序。

我最终的问题是我使用了不正确的DataSource类,因为我只是跟随在线教程/示例。 发现这个提示感谢David Dai对自己的问题发表评论: Spring JDBC无法加载JDBC驱动程序类[oracle.jdbc.driver.OracleDriver]

后来还发现了Spring专家的例子: https : //springframework.guru/configuring-spring-boot-for-oracle/

基于一般示例,使用org.springframework.jdbc.datasource.DriverManagerDataSource引发错误的示例。

@Config @EnableTransactionManagement public class appDataConfig { \* Other Bean Defs *\ @Bean public DataSource dataSource() { // configure and return the necessary JDBC DataSource DriverManagerDataSource dataSource = new DriverManagerDataSource("jdbc:oracle:thin:@//HOST:PORT/SID", "user", "password"); dataSource.setSchema("MY_SCHEMA"); return dataSource; } }

并使用oracle.jdbc.pool.OracleDataSource更正exapmle:

@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; } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值