当使用用于BigQuery的Simba JDBC驱动程序将BigDecimal值插入数字列时,为什么会丢失数字精度?
当使用带有绑定变量的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 | +-------------+ 但实际产出是 +----------
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()