0

使用 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 上运行良好,返回值的类型是整数。但是,在 MySQL 中,类型是 Long,而我认为它应该是 Integer。在 Mysql 中查询同一行时,“id”返回为 Integer。

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

4

1 回答 1

1

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

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

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

于 2012-10-10T11:49:43.610 回答