Mysql从PreparedStatement.getGenerateKeys()返回Long;

标签 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。

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

最佳答案

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

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

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

关于Mysql从PreparedStatement.getGenerateKeys()返回Long;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806020/

相关文章:

mysql - 在单个记录上连接多个记录

java - 无法在 JavaLite 中使用数据库属性文件

postgresql - 如何将连接池与 ActiveJDBC 结合使用,而不是每次都只使用 Base.open 和 close?

java - ActiveJDBC 多态父级的热切加载

sql - 我可以将 MySQL 数据库与 App Engine 应用程序一起使用吗

java - Liferay:未找到合适的驱动程序

php - 将图像从我的服务器上传到受密码保护的网站

java - 监听器拒绝连接,并出现以下错误 : ORA-12519, TNS:未找到适当的服务处理程序

php - 用于构建具有许多选择和连接的复杂 MySQL 查询的 PDO 方法?

mysql - Django的inspectdb不做ManyToManyField