当使用用于BigQuery的Simba JDBC驱动程序将BigDecimal值插入数字列时,为什么会丢失数字精度?

当使用用于BigQuery的Simba JDBC驱动程序将BigDecimal值插入数字列时,为什么会丢失数字精度?,jdbc,google-bigquery,simba,Jdbc,Google Bigquery,Simba,当使用带有绑定变量的JDBC准备语句将BigDecimal值插入数字列时,小数部分将丢失。另一方面,如果不使用绑定变量,则保留小数部分 create table DS_TEST.BIGDECIMAL_TEST (NUMERIC_COL numeric) 我期望输出: +-------------+ | NUMERIC_COL | +-------------+ | 123.45 | | 567.89 | +-------------+ 但实际产出是 +----------

当使用带有绑定变量的JDBC准备语句将BigDecimal值插入数字列时,小数部分将丢失。另一方面,如果不使用绑定变量,则保留小数部分

create table DS_TEST.BIGDECIMAL_TEST (NUMERIC_COL numeric)
我期望输出:

+-------------+
| NUMERIC_COL |
+-------------+
| 123.45      |
| 567.89      |
+-------------+
但实际产出是

+-------------+
| NUMERIC_COL |
+-------------+
| 123.45      |
| 567         |
+-------------+

这是一个bug还是我遗漏了什么?

我能够复制您的场景,因为我的大十进制值也被舍入。然而,在深入研究之后,我发现有一个问题,传递给
PreparedStatement
的BigDecimal值被舍入到最接近的整数。我建议它跟踪它的更新。解决办法是使用:

PreparedStatement preparedStatement = connection.prepareStatement
    ("insert into `${projectId}`.DS_TEST.BIGDECIMAL_TEST (NUMERIC_COL) values (123.45)")
preparedStatement.executeUpdate()
就像你已经在做的那样

希望能有帮助

PreparedStatement preparedStatement = connection.prepareStatement
    ("insert into `${projectId}`.DS_TEST.BIGDECIMAL_TEST (NUMERIC_COL) values (123.45)")
preparedStatement.executeUpdate()