Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java和PostgreSQL中处理32位数字?_Java_Postgresql_Long Integer_Numeric - Fatal编程技术网

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

如何在Java和PostgreSQL中处理32位数字?,java,postgresql,long-integer,numeric,Java,Postgresql,Long Integer,Numeric,我正在用JavaFX和PostgreSQL数据库开发一个小工具。我现在的任务是处理32位数字。我试了一下长的,但太短了 我记得Postgres抱怨是因为我没有使用正确的数据类型,这就是为什么我在这里先问,然后再更改所有受此问题影响的行 我不计算这个数字,但我需要在其中保存null 你有什么建议?字符串,大整数 代码示例: //... myObject.setSerialNumber(getLongFromDB(rs, "serialnumber")); //... private static

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

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

我不计算这个数字,但我需要在其中保存null

你有什么建议?字符串,大整数

代码示例:

//...
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中,您几乎从不使用数据库返回的数字执行任何数学计算。还有一些大小,BigDecimal的长度比它小。

我建议将它保存在一个字符/整数数组中,这实际上是你可以轻松解决它的方法,而且在任何语言中都不会头痛。
以后,如果你想用它做数学运算,你需要定义每个数学运算,就像我们在小学时做的那样。

这真的是一个数字还是一个只包含数字的字符串?在数据库中是一个“数字(32)”。您的方法的参数是什么?它长吗?或者它是其他类型的,所以您要存储
null
?它是setObject(Long l)。我现在使用biginger来获取数值。当我写入数据库时,我使用biginger参数创建了一个新的BigDecimal,因为Postgres不能映射biginger。谢谢