使用 JDBC PreparedStatement 返回 MySql 中生成的键

Posted

技术标签:

【中文标题】使用 JDBC PreparedStatement 返回 MySql 中生成的键【英文标题】:Returning generated keys in MySql with JDBC PreparedStatement [duplicate] 【发布时间】:2012-05-16 08:50:01 【问题描述】:

我正在使用纯 JDBC 和 DAO 层进行编程,因为我的 Tomcat 中的 Java 内存 上只有 61.38 MB (服务托管)。我在 mysql 中有一个带有 AUTO_INCREMENT 列的表。当前的实现没有问题。但我想知道AUTO_INCREMENT 列中生成的值。

当前代码在插入新行的方法中如下所示。

public Integer store(MyBean bean) throws DAOException 
    Connection conn = null;
    PreparedStatement ps = null;
    try 
        conn = getConnection();
        ps = conn.prepareStatement("INSERT ...");
        if (bean.getSomeProperty() != null) 
            ps.setShort(1, bean.getSomeProperty());
         else 
            ps.setNull(1, Types.SMALLINT);
        

        /* Other fields */

        int rows = ps.executeUpdate();
        if (rows == 1) 
            // RETURN the generated value
        
        return null;
     catch (SQLException e) 
        throw new DAOException(e);
     finally 
        ...
    

我在Hibernate中看到这是可能的,但是因为我的记忆力很小,所以不是一个可行的选择。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

有两种方式:

使用getGeneratedKeys() 的JDBC 概念。见http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-last-insert-id.html#connector-j-examples-autoincrement-getgeneratedkeys

或者使用MySQL函数LAST_INSERT_ID()。见http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-last-insert-id.html#connector-j-examples-autoincrement-select

【讨论】:

以上是关于使用 JDBC PreparedStatement 返回 MySql 中生成的键的主要内容,如果未能解决你的问题,请参考以下文章

JDBC深入理解Statement和PreparedStatement

Java_JDBC使用Statement和PreparedStatement

JDBC:使用 PreparedStatement 创建表,SQL 语法错误与否?

JDBC:PreparedStatement.cancel() 的正确行为是啥

JDBC PreparedStatement.executeQuery() 的详细信息

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException 使用 PreparedStatement 时