Java PG JDBC驱动程序中的错误-MONEY DB类型(double类型的值不正确)
我正在使用Postgres JDBC驱动程序 (postgresql-42.2.5.jar)和postgresql 10.6 RDBMS 我有一个结果集,其中3列的类型为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()时,会出现以下错误:
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
之类的字符串转换为有效数字