首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SimpleJdbcInsert对象中指定Oracle序列以从Oracle序列生成密钥

在SimpleJdbcInsert对象中指定Oracle序列以从Oracle序列生成密钥
EN

Stack Overflow用户
提问于 2016-07-23 23:55:34
回答 2查看 1.3K关注 0票数 3

我使用SimpleJdbcInsert作为,

代码语言:javascript
复制
SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(dataSource).withTableName(TABLE_NAME).withSchemaName(SCHEMA_NAME);

Map<String, Object> namedParameterMap = new HashMap<String, Object>();
namedParameterMap.put("ID", "MYSEQ.NEXTVAL");
namedParameterMap.put("COLUMN1NAME",obj1.getColumn1Value());
namedParameterMap.put("COLUMN2NAME", obj1.getColumn2Value());

simpleJdbcInsert.withoutTableColumnMetaDataAccess().execute(namedParameters);

但它只为ID列抛出错误,其他列工作正常,我通过注释掉ID列确认了这一点。

代码语言:javascript
复制
java.lang.NumberFormatException: null

我检查了我的Oracle序列,它工作正常。我查看了很多博客,但找不到一个合适的博客,它使用的是甲骨文序列和SimpleJdbcInsert。

EN

回答 2

Stack Overflow用户

发布于 2016-09-22 20:38:07

这是因为jdbcTemplate试图将"MYSEQ.NEXTVAL"解析为长整型,这是ID的数据类型。不能将SQL语句作为命名参数发送。

票数 2
EN

Stack Overflow用户

发布于 2021-07-01 12:13:45

我们不能直接在SimpleJdbcInsert中使用Oracle sequence。为此,我们必须使用triggers并动态插入序列值。

我的表名是

产品(ID、名称、数量、价格)

创建一个数据库触发器(在我的例子中,它是一个用于获取pk值的数据库触发器PROD_ID)

  • create

CREATE OR REPLACE TRIGGER PROD_PK_GEN_TRIGGER

在产品上插入之前的

每行

BEGIN

选择PROD_SEQ.NEXTVAL

进入:new.ID

来自DUAL的;

结束;

  1. 在java代码

中使用id作为自动生成的密钥

SimpleJdbcInsert simpleJdbcInsert =新产品(DataSource).withTableName(“产品”) .usingGeneratedKeyColumns("ID");

  1. 调用executeAndReturnKey()方法执行并获取自动生成的密钥

.intValue(); id = simpleJdbcInsert .executeAndReturnKey(新BeanPropertySqlParameterSource(产品)) int

注意:默认情况下,executeAndReturnKey()方法会返回java.lang.Number类型,为了在int类型中获取pk,我们必须使用intValue()方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38543659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档