gpt4 book ai didi

java - 使用 SimpleJdbcInsert 和 Sybase 检索生成的 key 时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:32 35 4
gpt4 key购买 nike

我在使用 Sybase(jTDS 驱动程序)和某些数据时遇到了 SimpleJdbcInsert.executeAndReturnKey 的奇怪问题。

看下面的例子:

SimpleJdbcInsert insert = new SimpleJdbcInsert(jdbcTemplate)
.withTableName("TABLE_NAME")
.usingGeneratedKeyColumns("ID");

List<String> columns = new ArrayList<String>();
columns.add("SOME_NUMERIC_DATA");
columns.add("SOME_STRING_DATA");

Map<String, Object> params = new HashMap<String, Object>();
params.put("SOME_NUMERIC_DATA", 10.02);
params.put("SOME_STRING_DATA", "AAAA");

Number insertId = insert.executeAndReturnKey(params);

上面的操作将会失败

DataIntegrityViolationException: Unable to retrieve the generated key for the insert

插入本身很好,就像我执行 insert.execute(params) 插入将正常工作(但我需要生成的列值)。

如果我为 SOME_NUMERIC_DATA 列插入 null 而不是 10.02 ,那么它将正常工作并返回生成的列值。此外,如果所有字段都是 VARCHAR/String 那么它将正常工作。

任何人都可以在这里看到任何可能导致字符串和数字字段组合导致此问题的内容。

我还应该补充一点,当我对 H2 数据库使用完全相同的代码时,它始终有效 - 这似乎与 Sybase/jTDS 有关

最佳答案

我在 SQL Server 上遇到了同样的问题,并通过在调用 executeAndReturnKey() 之前调用此配置方法来修复它:

mySimpleJdbcInsert.setAccessTableColumnMetaData(false);

我怀疑该错误与数据库元数据有关:如 spring 引用 http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/jdbc.html 中所述。 ,SimpleJdbcInsert 使用数据库元数据来构造实际的插入语句。

还可以使用 SQL OUTPUT 子句,例如

INSERT INTO myTable (Name, Age)
OUTPUT Inserted.Id
VALUES (?,?)

并使用一些更通用的 JdbcTemplate.execute() 来处理插入。

关于java - 使用 SimpleJdbcInsert 和 Sybase 检索生成的 key 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26161626/

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