如何在春季向 DB 插入一行,仅使用自动生成的值,并返回一个 ID?
Posted
技术标签:
【中文标题】如何在春季向 DB 插入一行,仅使用自动生成的值,并返回一个 ID?【英文标题】:How to insert a row to DB in spring, using only auto-generated values, and return an ID? 【发布时间】:2016-04-20 11:25:47 【问题描述】:我使用spring框架,并且想在DB中插入一行以获得它的ID,这是进一步处理所需要的。
下面给出了插入查询,这是一个简单的查询,没有参数。但更糟糕的是,如何使用来自SimpleJdbcInsert
的executeAndReturnKey
构建工作调用?这是插入的 SQL 查询。但不知道是否可以在simpleJdbcInsert
实例中使用。
insert into sdc_import_run(id_import_run, create_date)
values(nextval('seq_import_run'),now())
我试过了
Number genId = simpleJdbcInsert.withTableName("sdc_import_run")
.usingGeneratedKeyColumns("id_import_run")
.executeAndReturnKey(new MapSqlParameterSource());
它不起作用,问题是,他们想要表的所有参数,但我不想要它们中的任何一个,我只想插入自动生成的:id_import_run
(主键)和create_date
。因此,我希望将插入的 ID 放入变量中。你会怎么做?
编辑 这种方法效果很好。
public Integer persistInsertImportRunForId()
String queryString = getSql("insertImportRunForId");
KeyHolder holder = new GeneratedKeyHolder();
jdbcTemplate.update(con ->
return con.prepareStatement(queryString, Statement.RETURN_GENERATED_KEYS);
, holder
);
return CommonUtils.tryOrGet(() -> holder.getKeys().get("id_import_run"), null);
【问题讨论】:
【参考方案1】:您可以使用JdbcTemplate 运行完整的插入 SQL。您可以在此处提供您想要的任何 SQL,为您的插入定义尽可能少或多的列,只要您的表的 DDL 允许。
This answer 更详细地介绍了这一点。
【讨论】:
以上是关于如何在春季向 DB 插入一行,仅使用自动生成的值,并返回一个 ID?的主要内容,如果未能解决你的问题,请参考以下文章
python中pymssql如何向sql server插入数据 插入的值可以用变量替换
使用 FireDac TFDCommand 对 autoinc 字段执行插入操作并检索生成的值