2013-10-06 63 views
3

我們有一個使用NamedParameterJdbcTemplate將消息保存到Oracle數據庫的Spring應用程序。 sql是一個簡單的插入。插入工作和數據庫已更新,但無法引發以下異常。Spring JDBC:使用Oracle時出錯

04:02:58.276 [org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] DEBUG o.s.jdbc.core.StatementCreatorUtils - JDBC 3.0 getParameterType call not supported 
java.sql.SQLException: Unsupported feature 
    at oracle.jdbc.driver.OracleParameterMetaData.getParameterType(OracleParameterMetaData.java:166) ~[ojdbc6-11.2.0.2.0.jar:11.2.0.2.0] 
    at org.springframework.jdbc.core.StatementCreatorUtils.setNull(StatementCreatorUtils.java:231) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:213) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.BatchUpdateUtils.setStatementParameters(BatchUpdateUtils.java:63) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.access$000(NamedParameterBatchUpdateUtils.java:32) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1.setValues(NamedParameterBatchUpdateUtils.java:47) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:899) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:890) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:589) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:890) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.executeBatchUpdateWithNamedParameters(NamedParameterBatchUpdateUtils.java:40) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:324) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:319) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE] 

我想知道是否有人可以幫助找出問題,謝謝。

+0

您willhave共享代碼,只是錯誤也無濟於事。 – Lokesh

回答

1

檢查代碼中的某個地方使用PreparedStatementMetaData

preparedStatement.getParameterMetaData().getParameterType(index); 這將導致此異常。

或者你將不得不分享你的代碼。

7

當您在列中設置null時,setNull函數需要數據庫ParameterType。 oracle驅動程序不支持ps.getParameterMetaData()。getParameterType(paramIndex) 功能,並且會引發異常並在日誌中顯示調試消息:「不支持JDBC 3.0 getParameterType調用」然後使用回退方法。

spring-jdbc(老版本沒有這樣做)的一個問題是,catch異常非常慢,並且爲每個列設置一個空值,這個異常被拋出並捕獲。其結果是從milleseconds查詢去TOT毫秒100的...

我沒有辦法尚未... https://jira.springsource.org/browse/SPR-10385

https://forums.oracle.com/thread/587880

編輯:當您使用Oracle驅動程序ojdbc7.jar然後parameterMetaData .getParameterType實現

EDIT2:讓我們投票支持提高;-)https://jira.springsource.org/browse/SPR-11100

更新:修復3.2.6,4.0 GA(SPR-11100)

相關問題