我寻找了一个类似的问题,但只找到了类似的问题,例如Godaddy JNDI 问题---无法为连接 URL 'null' 创建类 '' 的 JDBC 驱动程序,这不能回答我的一般问题。
Tomcat 7.0.8 ..以下代码
Context initialContext = new InitialContext();
datasource = (DataSource) initialContext.lookup("java:comp/env/" + "blah");
Connection c = null;
c = datasource.getConnection();
抛出此错误。
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
...
Caused by: java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:527)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:496)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:319)
at java.sql.DriverManager.getDriver(DriverManager.java:386)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
... 24 more
我不是在问它为什么失败或如何修复它。
我的问题是,为什么 LOOKUP 没有失败?
为什么查找创建一个无用的带有空 URL 的 BasicDataSource?有没有比尝试使用它并查看它是否爆炸更好的方法来检测 JNDI 名称是否“不存在”?这种方法让我想起了他们如何测试桥梁。
我终于硬着头皮把一堆代码从原始的 JDBC 代码移到了 JNDI,但仍有许多谜团。
如果可能的话,我想避免向下转换 BasicDataSource,以至少保留数据库独立性的错觉。
TIA