Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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 使用vertx jdbc将BigDecimal插入数据库_Java_Jdbc_Bigdecimal_Vert.x - Fatal编程技术网

Java 使用vertx jdbc将BigDecimal插入数据库

Java 使用vertx jdbc将BigDecimal插入数据库,java,jdbc,bigdecimal,vert.x,Java,Jdbc,Bigdecimal,Vert.x,我正在使用vertxjdbc客户机()进行数据库连接。这适用于除BigDecimal之外的所有数据类型 在我的数据库中,类型是decimal(13,2),在Java中,我使用的是BigDecimal数据类型。我只想用VertxJDBC客户端阅读并更新本专栏 不幸的是,我遇到了以下异常: SEVERE: Unhandled exception java.lang.IllegalStateException: Illegal type in JsonObject: class java.ma

我正在使用vertxjdbc客户机()进行数据库连接。这适用于除BigDecimal之外的所有数据类型

在我的数据库中,类型是decimal(13,2),在Java中,我使用的是BigDecimal数据类型。我只想用VertxJDBC客户端阅读并更新本专栏

不幸的是,我遇到了以下异常:

    SEVERE: Unhandled exception
java.lang.IllegalStateException: Illegal type in JsonObject: class java.math.BigDecimal
    at io.vertx.core.json.Json.checkAndCopy(Json.java:215)
    at io.vertx.core.json.JsonArray.add(JsonArray.java:444)
查看io.vertx.core.json.json.checkAndCopy,我发现框架不支持BigDecimal:

@SuppressWarnings("unchecked")
  static Object checkAndCopy(Object val, boolean copy) {
    if (val == null) {
      // OK
    } else if (val instanceof Number && !(val instanceof BigDecimal)) {
      // OK
    } else if (val instanceof Boolean) {
...
}
我在谷歌上搜索了一下,但没有找到解释为什么不支持这个

有解决办法吗?

使用以下版本:
(Java 8、Vertx 3.5.0、Postgres 9.6)

您可以将
大十进制
转换为
字符串
,然后使用
转换功能:

INSERT INTO test (i) VALUES (CAST('3.235' AS DECIMAL))
要重新阅读:

SELECT CAST(i AS TEXT) from test

非常感谢,这很有效。一个缺点是无法使用Vert.x codegen中的
@DataObject(generateConverter=true)
,因为codegen忽略了BigDecimal类型。您知道告诉转换器接受BigDecimal的方法吗?不,您不能告诉转换器接受
BigDecimal
。但是由于转换器需要从用户代码中调用,您可以在使用它的方法中为
BigDecimal
字段添加一些内容。很好,知道了。我手动添加了它,但我更喜欢另一种解决方案。谢谢