Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 PG JDBC驱动程序中的错误-MONEY DB类型(double类型的值不正确)_Java_Postgresql_Jdbc_Pg Jdbc - Fatal编程技术网

Java PG JDBC驱动程序中的错误-MONEY DB类型(double类型的值不正确)

Java PG JDBC驱动程序中的错误-MONEY DB类型(double类型的值不正确),java,postgresql,jdbc,pg-jdbc,Java,Postgresql,Jdbc,Pg Jdbc,我正在使用Postgres JDBC驱动程序 (postgresql-42.2.5.jar)和postgresql 10.6 RDBMS 我有一个结果集,其中3列的类型为money (在分贝级)。我有一个结果集元数据对象 当列类型为money时,驱动程序的方法 getColumnType()为money列返回8 我查过了,8的值是双倍的 但是从数据库返回的值类似于 $1312536.00或说1312536.00 因此,当我尝试在该列索引上调用rs.getObject()时,会出现以下错误:

我正在使用Postgres JDBC驱动程序 (postgresql-42.2.5.jar)和postgresql 10.6 RDBMS

我有一个结果集,其中3列的类型为
money
(在分贝级)。我有一个结果集元数据对象

当列类型为money时,驱动程序的方法 getColumnType()为
money
列返回8

我查过了,8的值是双倍的

但是从数据库返回的值类似于
$1312536.00
或说
1312536.00

因此,当我尝试在该列索引上调用rs.getObject()时,会出现以下错误:

    org.postgresql.util.PSQLException: Bad value for type double: 1,312,536.00
        at org.postgresql.jdbc.PgResultSet.toDouble(PgResultSet.java:2934)
        at org.postgresql.jdbc.PgResultSet.getDouble(PgResultSet.java:2323)
        at org.postgresql.jdbc.PgResultSet.internalGetObject(PgResultSet.java:194)
        at org.postgresql.jdbc.PgResultSet.getObject(PgResultSet.java:2572)
        at org.apache.commons.dbcp2.DelegatingResultSet.getObject(DelegatingResultSet.java:733)
        at org.apache.commons.dbcp2.DelegatingResultSet.getObject(DelegatingResultSet.java:733)
因此,当涉及到货币类型时,司机似乎无法与自己的DB对话

这对我来说似乎是一个错误

似乎PG-JDBC有一个漏洞

但他们关闭了它,因为没有反应,而不是修复它

有什么办法解决这个问题吗


这真的是一个错误还是我遗漏了什么

尝试将
money
转换为
numeric
并查看是否有效(例如
选择cast(价格为numeric)从table
@dsp\u user我想使用money。不是为了避免这个问题。我知道如何避免它,例如,我可以在Postgres中使用varchar,在Java中使用String。这是money数据类型的一个缺点-简单的解决方案是根本不使用该数据类型。我从来都不知道它有什么好处(在某个时候,博士后团队甚至考虑过反对它)-你甚至不能用它存储多个货币。特别是因为货币是由会话决定的,因此对于一个用户来说,它可能是
$
,而对于另一个用户,相同的值可能显示为
-谁会想要它?@a_horse_,没有名称,但例如在SQL Server中,money就是money,money value。当我查询时对于货币列,它不会向我返回%的美元。为什么Postgres还会将当前符号与之关联?为什么它会在结果集中返回此符号?我不认为这是货币类型本身的缺点。这似乎是它周围的某些事物如何实现的缺点。好吧,Postgres不是SQL Server。这就是在Postgres中设计货币类型的方式(无论出于何种原因)。没有“货币类型本身”这样的东西,因为这不是SQL标准的一部分。如果您想继续使用可怕的货币类型(例如,
price::decimal
),您需要在查询中强制转换列或者直接使用标准类型,例如
decimal
。但是Java无法将
$1312536.00
这样的字符串转换为有效的数字,以便将
货币
转换为
数字
,并查看是否有效(例如
选择cast(价格为数字)从table
@dsp\u user我想使用money。不是为了避免这个问题。我知道如何避免它,例如,我可以在Postgres中使用varchar,在Java中使用String。这是money数据类型的一个缺点-简单的解决方案是根本不使用该数据类型。我从来都不知道它有什么好处(在某个时候,博士后团队甚至考虑过反对它)-你甚至不能用它存储多个货币。特别是因为货币是由会话决定的,因此对于一个用户来说,它可能是
$
,而对于另一个用户,相同的值可能显示为
-谁会想要它?@a_horse_,没有名称,但例如在SQL Server中,money就是money,money value。当我查询时对于货币列,它不会向我返回%的美元。为什么Postgres还会将当前符号与之关联?为什么它会在结果集中返回此符号?我不认为这是货币类型本身的缺点。这似乎是它周围的某些事物如何实现的缺点。好吧,Postgres不是SQL Server。这就是在Postgres中设计货币类型的方式(无论出于何种原因)。没有“货币类型本身”这样的东西,因为这不是SQL标准的一部分。如果您想继续使用可怕的货币类型(例如,
price::decimal
),您需要在查询中强制转换列或者直接使用标准类型,如
decimal
,但Java无法将
$1312536.00
之类的字符串转换为有效数字