我查找了一個類似的問題,但只找到類似的問題,如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