gpt4 book ai didi

spring - 带枚举的 JDBC Spring 4 NamedParameterJdbcTemplate

转载 作者:行者123 更新时间:2023-12-03 21:35:15 24 4
gpt4 key购买 nike

我一直在使用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 中看到类如果它是方法中的枚举类型,它将总是失败
private static void setValue(PreparedStatement ps, int paramIndex

部分代码......
else if (sqlType == SqlTypeValue.TYPE_UNKNOWN) {
if (isStringValue(inValue.getClass())) {
ps.setString(paramIndex, inValue.toString());
}

问题

有人可以让我知道任何解决方法吗?或者我需要使用占位符(?)来设置数据的旧方法。

非常感谢

最佳答案

得到这个工作如下

sqlParameterSource.registerSqlType("gender", Types.VARCHAR);

这很好,但是如果我们需要在枚举上调用方法怎么办。假设 getValue 用于像 Male(10)、FEMALE(20) 这样的枚举?

我无法很好地使用这些枚举 NamedParameterJdbcTemplate
有人希望在 future 改善这一点吗?

谢谢

关于spring - 带枚举的 JDBC Spring 4 NamedParameterJdbcTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25046015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com