【发布时间】:2014-07-30 20:10:52
【问题描述】:
我一直很高兴使用JdbcTemplate,但后来我被说服使用NamedParameterJdbcTemplate。但是到目前为止,有时或一直没有享受到这一点。
假设我有一个 Person 类,如下所示:
public class Person implements Serializable {
private int age;
private String name;
private long socialId;
private Gender gender;
private String email;
enum Gender {
MALE, FEMALE
}
}
我正在尝试插入以下人员列表:
SqlParameterSource[] params
= SqlParameterSourceUtils.createBatch(personList.toArray());
getNamedJdbcTemplate().batchUpdate(insertSql, params);
但是它失败并显示以下消息
PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:230)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:169)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:169)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:402)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:235)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:166)
at org.springframework.jdbc.core.BatchUpdateUtils.setStatementParameters(BatchUpdateUtils.java:65)
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.access$000(NamedParameterBatchUpdateUtils.java:32)
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1.setValues(NamedParameterBatchUpdateUtils.java:48)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:999)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:989)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644)
... 41 more
我调试了一下,可以看到StatementCreatorUtils类中如果是Enum类型的方法总是会失败
private static void setValue(PreparedStatement ps, int paramIndex
部分代码....
else if (sqlType == SqlTypeValue.TYPE_UNKNOWN) {
if (isStringValue(inValue.getClass())) {
ps.setString(paramIndex, inValue.toString());
}
问题
有人可以告诉我任何解决方法吗?或者我需要使用占位符(?)来设置数据。
非常感谢
【问题讨论】:
标签: spring spring-jdbc