Spring JDBC& Oracle DB 12c:java.sql.SQLException:列类型无效。为什么?

时间:2014-12-05 11:10:01

标签: java spring spring-boot spring-jdbc oracle12c

我正在努力应对异常:

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 JDBC模板和Spring DB以及Oracle DB 12c作为数据源。

1 个答案:

答案 0 :(得分:6)

在spring文档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());