Использование OraclePreparedStatement с подключением DBCP - PullRequest
2 голосов
/ 20 сентября 2011

Я пытаюсь создать пул соединений с каркасом dbcp для моего сервера Oracle.Я использовал этот учебник для подключения.Проблема состоит в том, чтобы создать OraclePreparedStatement с этим соединением:

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

Есть ли возможность привести оператор?

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Не для класса Oracle, нет.Вот для чего JDBC.Это API.Используйте только java.sql.PreparedStatement.Пытаясь понизить рейтинг, вы нарушаете полиморфизм и нарушаете такие вещи, когда библиотека оборачивает реальное соединение и оператор, чтобы предоставить вам некоторые дополнительные услуги.

1 голос
/ 23 сентября 2014

У меня была та же проблема сегодня, и я решил ее, изменив конфигурацию 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"/>
....

также нужно было изменить определение ресурса в 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>
....

без измененийбыл необходим в моем коде.

0 голосов
/ 17 апреля 2013

Если вы используете Oracle, вы можете привести свое соединение к OracleConnection, а затем преобразовать подготовленный оператор в OraclePreparedStatement.Jdbc выполняет преобразование объектов Oracle в стандартные объекты sql, но они по-прежнему являются объектами Oracle sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...