2011-09-20 2 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

오라클 클래스에는 없습니다. 그것이 바로 JDBC가 필요한 것입니다. 그것은 API입니다. java.sql.PreparedStatement 만 사용하십시오. 다운 캐스트를 시도하면 다형성을 위반하고 라이브러리가 실제 연결 및 구문을 래핑하여 여기에 몇 가지 추가 서비스를 제공하는 이와 같은 것을 중단합니다.

0

오라클을 사용하고 있다면 OracleConnection에 연결을 캐스트 한 다음 준비된 문을 OraclePreparedStatement로 캐스팅 할 수 있습니다. jdbc가 수행하는 작업은 Oracle 객체를 표준 SQL 객체로 업 캐스팅 (upcast)하는 것이지만 여전히 Oracle sql 객체입니다.

1

오늘 같은 문제가있어서 here과 같이 Tomcat 구성을 변경하여 해결했습니다. 이 같은 유형 및 공장 등록 정보를 변경하여 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"/> 
.... 

또한

.... 
<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> 
.... 

변경이 내 코드에서 필요하지 않았습니다 변경해야했다 web.xml 파일에 정의 자원.

관련 문제