当前位置: 首页 > 知识库问答 >
问题:

无法使用spring jdbc NamedParameterJdbcTemplate以批处理方式存储枚举

阙繁
2023-03-14

我面临SpringJDBC的枚举问题。我有一个包含枚举值的POJO。我想在数据库中存储字符串值,而不是序号。我制作了一个DAO,除了使用命名参数jdbcTemplate的批处理方法(对于jdbcTemplate和BatchPreparedStatementSetter,它可以工作,但我更喜欢使用命名参数)之外,它工作得很好。

例如:

public int[] batchUpdate(List<MyPojo> pojos) throws DaoException {
    SqlParameterSource[] parameters = new SqlParameterSource[pojos.size()];

    for (int i = 0; i < pojos.size(); i++) {
        parameters[i] = new BeanPropertySqlParameterSource(pojos.get(i));
    }

    try {
        return namedParameterJdbcTemplate.batchUpdate(SQL_UPDATE, (SqlParameterSource[]) parameters);
    } catch (Exception ex) {
        throw new DaoException(ex);
    }
}

不适用于枚举属性。

我有一个错误:

原因:org。h2。jdbc。JdbcSQLException:列“状态字符变化(20)非空”的值太长“'ACED0057E7200466F72672E67656E792E7064702E66976562697264732E67656E79746F74652E646F6D61696E6D6F64656C2E6265742E4265744465636F6…(258)”;SQL语句:更新。。。设置状态=?其中id=?[22001-187]在组织。h2。消息DbException。位于org的getJdbcSQLException(DbException.java:345)。h2。消息DbException。在org上获取(DbException.java:179)。h2。桌子柱validateConvertUpdateSequence(Column.java:327)位于org。h2。桌子桌子validateConvertUpdateSequence(Table.java:737)位于org。h2。命令dml。使现代化在org上更新(update.java:125)。h2。命令命令容器。在org上更新(CommandContainer.java:78)。h2。命令命令org上的executeUpdate(Command.java:254)。h2。jdbc。JdbcPreparedStatement。org上的executeUpdateInternal(JdbcPreparedStatement.java:157)。h2。jdbc。JdbcPreparedStatement。org上的executeBatch(jdbpreparedstatement.java:1183)。springframework。jdbc。果心jdbc模板$4。doInPreparedStatement(JdbcTemplate.java:1005)位于org。springframework。jdbc。果心jdbc模板$4。doInPreparedStatement(JdbcTemplate.java:989)位于org。springframework。jdbc。果心jdbc模板。执行(JdbcTemplate.java:644)。。。43多

MyPojo有一个枚举值(状态)。这很奇怪,因为我要存储的枚举字符串是“已验证”而不是“aced000…”。如果我使用JPA,我会使用@Enumerated(EnumType.STRING)作为我的状态字段,但是SpringJDBC上是否存在类似的东西?

当做

共有1个答案

齐博厚
2023-03-14

最终通过注册sql类型解决:

    for (int i = 0; i < bets.size(); i++) {
        BeanPropertySqlParameterSource bpsps = new BeanPropertySqlParameterSource(pojos.get(i));
        bpsps.registerSqlType("status", Types.VARCHAR);
        parameters[i] = bpsps;
    }
 类似资料:
  • 在前面的章节,我们使用mysql交互模式输入语句和查看结果。我们也可以以批处理的模式来运行mysql。要达到这种目的,需要把我们想运行的语句放在一个文件里,然后告诉mysql从文件读取它的输入。 shell> mysql < batch-file 如果你是在Windows下运行mysql,文件里的一些特定字符会引起一些问题,你要这样做: C:\> mysql -e "source batch-f

  • 由于我对这个平台还不熟悉,所以我正在尝试找出Spring的工作方式。我有一个存储库声明如下: 我有几个查询方法在那里,但现在我想有另一个方法,不只是一个查询。该方法运行一个查询,如果找到一条记录,它就返回它,如果没有,它就用一些默认参数创建它。这种方法该何去何从? 我在文档中看到了自定义存储库实现,但因为它们与实际的是分开的,所以它们似乎不能访问数据库。

  • 我正在编写一个Spring批处理应用程序: null

  • 我已经开始探索Spring Batch,并遇到了一些基本问题。

  • 我正在尝试通过批处理文件创建vbs。但是有一行我包含一个对象。批处理文件无法将闭括号 )写入vbs,这在运行vbs时会导致错误。 批处理文件代码为: 输出: vbs zipIt.vbs vbs输出:Microsoft (R) Windows Script Host版本5.8版权所有(C) Microsoft Corporation。保留所有权利。 C: \Users\arvind\Desktop\