java - MySQL DB 上的 SimpleJdbcInsert 在executeAndReturnKey方法后返回BigInteger而不是Long

标签 java mysql key spring-jdbc

我正在使用以下主键声明对 MySQL 表运行简单的插入查询:

id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY

出于某种原因,他们返回的键是一个 BigInteger。我需要进行哪些更改才能将 Long 值作为键返回?

编辑

我基本上正在制作一个迷你 ORM,并且 Long 类型在编译时是未知的,因为它是一个类参数 ( AbstractDao<T, I> )。本质上,我需要能够将 Number 转换为 Long,而不使用任何包含 long 的内容(Long.valueOf()、.longValue() 等)。

但是我确实有一个包含 Long.class 的 Class 实例:

protected Class<?> idClass = ((Class<?>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]);

该实例可以以某种方式用于执行转换吗?您不能将 BigInteger 强制转换为 Long,也不能将 BigInteger 的字符串表示形式强制转换为 Long。如果有一种方法可以从我的类对象访问 valueOf() 这可能有效吗?

最佳答案

executeAndReturnKey(...)返回 Number ,所以调用longValue()如果您希望结果为long

如果您的方法不知道调用者所需的确切数字类型,请让调用者执行longValue()。或者,为您想要支持的各种返回类型编写多个方法,例如

public Number insertAndGetKey(...) {
    return ...executeAndReturnKey(...);
}
public int insertAndGetIntKey(...) {
    return insertAndGetKey(...).intValue();
}
public long insertAndGetLongKey(...) {
    return insertAndGetKey(...).longValue();
}

关于java - MySQL DB 上的 SimpleJdbcInsert 在executeAndReturnKey方法后返回BigInteger而不是Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61806755/

相关文章:

java - 递归到非递归,现在困扰我一段时间

java - 无法保存使用应用程序拍摄的图像?

php - 没有数据库的 Codeigniter 网站在实时服务器上生成数据库错误

php - MySQL 迭代分割字符串的元素并用它们做事

php - 智能 Ajax/PHP FAQ 脚本

jquery - 从 json 对象获取键名

java - 用于 bean 比较的单元测试框架

java - 在 Java 8 中查找高点和低点

php - 如果数组键是连续的,则将默认值添加到数组以填补索引之间的空白

ios - 如何从 iOS Swift 3 的键盘上删除更改语言键按钮