使用 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

JDBC-06-笔记

Spring Boot 和 JDBCTemplate简介: JDBC Template

Spring对 JDBC 的支持,JdbcTemplate类的使用

JdbcTemplate基本使用

JdbcTemplate基本使用