Java 使用vertx jdbc将BigDecimal插入数据库
我正在使用vertxjdbc客户机()进行数据库连接。这适用于除BigDecimal之外的所有数据类型 在我的数据库中,类型是decimal(13,2),在Java中,我使用的是BigDecimal数据类型。我只想用VertxJDBC客户端阅读并更新本专栏 不幸的是,我遇到了以下异常: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
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
字段添加一些内容。很好,知道了。我手动添加了它,但我更喜欢另一种解决方案。谢谢