使用不带Statement的apache dbutils获取自动增量生成的密钥

时间:2016-08-05 10:26:21

标签: java mysql jdbc apache-commons-dbutils

我不使用Statement来执行查询。方法看起来像

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(不从用户那里进行额外的select *)?

1 个答案:

答案 0 :(得分:0)

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

因此,您的调用将通过存储过程传递INSERT部分所需的任何参数,然后是前面提到的。

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

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

幸运的是,这些类型的呼叫在很多情况下并不常见。

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