我查找了一个类似的问题,但只找到类似的问题,如Godaddy JNDI Problem---Cannot create JDBC driver of class '' for connect URL 'null',它不回答我的通用问题。为什么JNDI返回一个带有NULL URI的数据源而不是查找失败?
的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
我不是问为什么它失败或如何解决它。
我的问题是,为什么没有查找失败?
为什么查找创建一个空的URL无用的BasicDataSource?有没有更好的方法来检测JNDI名称是否“不存在”,而不是尝试使用它并查看它是否炸毁?这种方法让我想起了how they test bridges。
我终于忍辱负重,移动一串代码从原始JDBC代码,JNDI,和许多奥秘仍然存在。
我想避免向下类型转换的BasicDataSource如果可能的话,至少保持数据库的独立性的错觉。
TIA
人不能丢掉幻想应对... – Chucky 2015-09-28 11:28:37
@Chucky你是什么意思? – 2015-09-29 17:35:13