2014-12-05 72 views
0

我有以下異常艱難:Spring JDBC和Oracle DB 12c:java.sql.SQLException:列類型無效。爲什麼?

org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [update EVALUATION_SHEET set STATUS=?, LAST_EDITED=? where id=?]; SQL state [99999]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type 

這是這裏拋出:

jdbcTemplate.update("update E_SHEET set STATUS=?, LAST_EDITED=? where id=?", 
       new Object[]{eSheet.getStatus().ordinal(), eSheet.getLastEditDate(), eSheet.getId()}, 
       new Object[]{OracleTypes.NUMBER, OracleTypes.TIMESTAMP, OracleTypes.NUMBER}); 

創建數據庫表如下:

create table E_SHEET (
    ID number not null unique, 
    ID_POSITION number not null, 
    STATUS number default 0 not null, 
    ID_EXAMINER number not null, 
    LAST_EDITED timestamp not null); 

我不知道是什麼造成問題。此方法:

eSheet.getLastEditDate() 

返回java.util.Date對象。我將Spring Boot和Oracle DB 12c作爲數據源使用Spring JDBC模板。

+0

last_edited是一個時間戳,這意味着你將需要使用時間戳對象:'新的時間戳(eSheet.getLastEditDate()的getTime())' – fmodos 2014-12-05 11:13:36

+0

這個例外聲明基本上只是說:「我得到了這另一個例外「。郵政*那*一。 – chrylis 2014-12-05 11:14:30

回答

5

春天文檔http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html後,更新會的工作是這樣的:

jdbcTemplate.update("update t_actor set last_name = ? where id = ?", "Banjo", 5276L);

或類似這樣的

jdbcTemplate.update("update orders set shipping_charge = shipping_charge * ?/100 where id = ?", pct, orderId);

但你傳遞對象的數組作爲參數的方法。

爲什麼不是這樣?

jdbcTemplate.update("update E_SHEET set STATUS=?, LAST_EDITED=? where id=?", eSheet.getStatus().ordinal(), eSheet.getLastEditDate(), eSheet.getId());

相關問題