使用 jdbctemplate / jdbc for Hana db 获取序列生成的主键
Posted
技术标签:
【中文标题】使用 jdbctemplate / jdbc for Hana db 获取序列生成的主键【英文标题】:Fetch primary key generated by sequence using jdbctemplate / jdbc for Hana db 【发布时间】:2017-04-07 05:53:26 【问题描述】:我们正在尝试在 hana db 中插入记录,因此我们目前正在使用 jdbc 模板和密钥持有者来保存数据并检索新生成的列 id。这适用于 postgress 但不适用于 hana。
query ="SELECT CURRENT_IDENTITY_VALUE() FROM \"HALOSYS\".\"HaloTestDemo\"";
resultSet = stmt.executeQuery(query);
上面的语句给出了当前的标识值,但这不适合我们想要使用 jdbc 模板的上下文。 请给我解决这个问题的想法。 如果我们添加preparedstatement生成的键,我会得到以下异常
com.sap.db.jdbc.exceptions.jdbc40.SQLFeatureNotSupportedException: Method prepareStatement( String, int )() of Connection is not supported.
【问题讨论】:
您想获取插入新行时生成的键吗? 是的,我想要生成的最新ID。 com.sap.db.jdbc.exceptions.jdbc40.SQLFeatureNotSupportedException:不支持Connection的方法prepareStatement(String, int)()。 【参考方案1】:尝试from DUMMY
代替表名,并在与插入相同的会话中执行此操作。如果你使用连接池,那就更难了。
【讨论】:
【参考方案2】:请准备您的查询语句以包含插入记录,并从同一张表中选择 CURRENT_IDENTITY_VALUE() 到匿名块中的一个查询语句中,如下所示:
DO BEGIN
INSERT INTO <TABLE_NAME> .....;
SELECT CURRENT_IDENTITY_VALUE() FROM <TABLE_NAME>;
END;
【讨论】:
以上是关于使用 jdbctemplate / jdbc for Hana db 获取序列生成的主键的主要内容,如果未能解决你的问题,请参考以下文章
Spring对JDBC的模板支持——JdbcTemplate
Spring Boot 和 JDBCTemplate简介: JDBC Template