使用没有语句的 apache dbutils 获取自动增量生成的密钥 [重复]

Posted

技术标签:

【中文标题】使用没有语句的 apache dbutils 获取自动增量生成的密钥 [重复]【英文标题】:Get autoincremented generated key with apache dbutils without Statement [duplicate] 【发布时间】:2016-12-11 17:38:29 【问题描述】:

我不使用语句来执行查询。这些方法看起来像

public static int insertIntoUserTable (String username, String password) 
        String query = "insert into user (username, password) values (?, ?)";
        QueryRunner run = new QueryRunner(FeedDbDataSource.getDataSource());
        ResultSetHandler<User> resultHandler = new BeanHandler<>(User.class);
        try 
            run.insert(query, resultHandler, username, password);
         catch (SQLException e) 
            // handle
        
        return ;
    

如何获取插入行的 id(无需从 user where... 进行额外的 select *)?

【问题讨论】:

【参考方案1】:

注意到 Ollie 删除的答案只有某些人可见,我将创建一个存储过程。它执行INSERT,然后在INSERT 调用之后在其末尾返回LAST_INSERT_ID() 的1 行1 列结果集。

因此,您将调用存储的过程,传递INSERT 部分所需的任何参数,然后是上述内容。

INSERT student (lastname, ...) values (pLastName, ...); 
SELECT LAST_INSERT_ID() AS `ai_id`; -- ai_id becomes the column name

返回的 ID 与此连接相关,不受其他用户的干扰,并且在任何对象返回连接池之前。

幸运的是,这些类型的调用在大多数情况下并不常见。

如果您需要有关存储过程包装器的帮助,请询问。

【讨论】:

以上是关于使用没有语句的 apache dbutils 获取自动增量生成的密钥 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

apache-commons-dbutils 可以将 bean 转换为 SQL 语句吗?

如何使用 Apache DbUtils 获取一对多关联和父子类型关联?

java基础之JDBC九:DbUtils的简介及使用

QueryRunner类

Apache DBUtils 和标量值

DBUtils