Mysql从PreparedStatement.getGeneratedKeys()返回Long;

时间:2012-10-09 18:18:45

标签: mysql jdbc activejdbc

使用JDBC 3驱动程序,可以将记录插入表中并立即获取列的自动生成值。该技术用于ActiveJDBC。

以下是表格定义:

CREATE TABLE users (id  int(11) NOT NULL  auto_increment PRIMARY KEY, first_name VARCHAR(56), last_name VARCHAR(56), email VARCHAR(56)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这在H2和PostgreSQL上工作正常,返回值的类型是Integer。 但是,在MySQL中,类型是Long,而我认为它应该是Integer。 在Mysql中查询同一行时,“id”返回为Integer。

任何人都知道为什么“getGeneratedKeys()”会在Mysql中返回java.lang.Long以及如何修复它?

1 个答案:

答案 0 :(得分:1)

原因: MySQL用于跟踪值的生成器是BIGINT,因此驱动程序将其描述为BIGINT,这相当于Long。请参阅MySQL手册中的LAST_INSERT_ID

像PostgreSQL这样的驱动程序返回表的实际列(实际上PostgreSQL在使用getGeneratedKeys()时返回所有列;我假设MySQL只调用LAST_INSERT_ID()

如何解决: 正如Jim Garrison在评论中所指出的:始终使用getInt()getLong(),而不是getObject()