如何处理 Java 和 PostgreSQL 中的 32 位数字?

How to handle a 32 digits numeric in Java and PostgreSQL?

我正在使用 JavaFX 和 PostgreSQL 数据库开发一个小工具。我现在的任务是处理一个 32 位数字。我用 Long 试了一下,但是太短/太小了。

我记得 Postgres 抱怨是因为我没有使用正确的数据类型,这就是为什么我要先在这里询问,然后再更改所有受此问题影响的行。

我不会用这个数字进行数学运算,但我需要在其中保存 null。

你有什么建议?字符串,BigInteger?

代码示例:

//...
myObject.setSerialNumber(getLongFromDB(rs, "serialnumber"));
//...

private static Long getLongFromDB(ResultSet rs, String column) throws SQLException {
    Long l = rs.getLong(column);
    if (rs.wasNull()) l = null; // because getLong is long not Long, I need to know about null
    return l;
}

在 Oracle/PostgreSQL 的情况下 NUMBER/NUMERIC 对应的类型是 Java 的 BigDecimal。这两种类型具有相同的内部表示(数字存储为十进制数字)。所以你不会遇到任何舍入错误的问题,而且它们之间的转换应该更快。

许多 Java 开发人员使用 Int(s)/Long(s) 作为 ID,这是一个很大的误解,因为他们被告知 int/long“快得多”。在 JEE 中,您实际上永远不会对从数据库返回的 NUMBER 执行任何数学计算。 BigDecimal 也小于 Long.