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

时间:2018-02-05 10:15:51

标签: java jdbc bigdecimal vert.x

我正在使用vertx-jdbc-client(http://vertx.io/docs/vertx-jdbc-client/java/)进行数据库连接。这适用于除 BigDecimal 之外的每种数据类型。

在我的数据库中,类型为 decimal(13,2),在Java中我使用 BigDecimal 数据类型。我只想阅读&使用vertx-jdbc-client更新此列。

不幸的是我得到以下异常:

    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)

1 个答案:

答案 0 :(得分:1)

您可以将BigDecimal转换为String,然后使用CAST功能:

INSERT INTO test (i) VALUES (CAST('3.235' AS DECIMAL))

并回读:

SELECT CAST(i AS TEXT) from test