我正在使用以下主键声明对 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/