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