2011-09-20 86 views
2

我試圖與我的Oracle服務器的DBCP框架的連接池。 我用這個tutorial進行連接。 問題是要創建一個OraclePreparedStatement與此相關:使用OraclePreparedStatement與DBCP連接

Connection oracleCon; 
OraclePreparedStatement o_stmt; 
String sql = "INSERT INTO T002_metadata (T002_datacitexml,T002_version, T002_active)  VALUES (?,?,?) RETURNING T002_id INTO ?"; 


oracleCon = ConnectionManager.ds.getConnection(); 

o_stmt = ((OraclePreparedStatement) oracleCon.prepareStatement(sql)); 

執行此操作後,會拋出異常。

org.apache.commons.dbcp.DelegatingPreparedStatement cannot be cast to oracle.jdbc.OraclePreparedStatement 

有沒有可能投下這個聲明?

+0

請參閱相關的問題:http://stackoverflow.com/questions/43985601/write-to-oracle-11-2-database-from-java-8-via-tomcat-8-5-9-using-oracleprepareds/43986500#43986500 – user46688

回答

2

沒有到Oracle類,沒有。這就是JDBC的用途。這是一個API。僅使用java.sql.PreparedStatement。通過嘗試垂頭喪氣,你違反多態性,打破這樣的事情,在一個庫包真正的連接和語句爲您提供一些額外的服務。

0

如果您使用的是Oracle,您可以將連接強制轉換爲OracleConnection,然後將您準備好的語句轉換爲OraclePreparedStatement的 。 jdbc所做的是將Oracle對象上傳到標準sql對象,但它們仍然是Oracle sql對象。

1

今天我有同樣的問題,並通過改變配置Tomcat的建議here解決它。 我通過改變類型和工廠屬性像這樣改變了context.xml文件:

.... 
<Resource name="jdbc/dsName" 
     auth="Container" 
      type="oracle.jdbc.pool.OracleDataSource" 
      factory="oracle.jdbc.pool.OracleDataSourceFactory" 
     user="username" 
     password="password" 
     driverClassName="oracle.jdbc.driver.OracleDriver" 
     url="jdbcurl"/> 
.... 

也是資源定義web.xml文件,就必須改變

.... 
<resource-ref> 
    <description>Oracle datasource</description> 
    <res-ref-name>jdbc/test</res-ref-name> 
    <!-- <res-type>javax.sql.DataSource</res-type>--> 
    <res-type>oracle.jdbc.pool.OracleDataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 
.... 

已經需要我的代碼沒有變化。