2015-03-25 21 views
0

我的連接池是Tomcat服務器的context.xml的聲明如下得到連接池的聲明用戶名:如何在運行時

<Resource name="jdbc/codesign" auth="Container" 
      type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" 
      url="jdbc:oracle:thin:@abc.fjd.com" 
      username="tiger" password="tiger123" maxActive="30" maxIdle="10" 
      poolPreparedStatements="true" maxOpenPreparedStatements="100" 
      validationQuery="SELECT SYSDATE FROM DUAL" maxWait="10000"/> 

我初始化數據源用常規方法爲:

Context initContext = new InitialContext(); 
Context envContext = (Context) initContext.lookup("java:/comp/env"); 
ds = (DataSource) envContext.lookup("jdbc/codesign"); 

我想要的是在運行時訪問用戶名(本例中爲「tiger」)。我在javax.sql.DataSource班沒有看到任何這樣的方法。當我嘗試使用

Connection conn = DataSourceConnectionPool.getConnection() 
conn.getSchema(); 

擺脫連接模式我獲得以下錯誤:

java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.getSchema() 

如果第一個解開的連接,我得到了同樣的錯誤:

conn.unwrap(OracleConnection.class).getSchema() 
java.lang.AbstractMethodError: oracle.jdbc.driver.OracleConnection.getSchema() 

是療法從數據源或連接獲取模式名稱或用戶名的方法?

+0

AKHIL, 這裏已經回答: * http://stackoverflow.com/questions/13341286/how-to-get-database-schema-name-when-using-oracle-jdbc-connection Cheers – 2015-03-25 11:28:34

回答

1

如果您正在使用Tomcat,您DataSoruce實現是最有可能的BasicDataSource https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.html

你可以投你的DS來的BasicDataSource,並通過getUsername訪問用戶()。

但是,當然首先要打印db.getClass()。getName()來查看實際的實現。

+0

它的類型爲'org.apache.tomcat.dbcp.dbcp.BasicDataSource'。如何添加這個作爲maven依賴?我知道這個類是在tomcat lib中的'tomcat-bbcp.jar'文件中。但是如何將它作爲Maven依賴項來訪問,因爲它沒有版本號後綴。 – Akhil 2015-03-27 05:53:33

+0

我不知道。只是完整的Tomcat依賴。 – Zielu 2015-03-27 12:49:01