【JDBC Driver】Decimal型のカラムにNULLをInsertすると、他のカラムの小数桁部分が四捨五入される

nt 0 評価のポイント
2024-02-09T06:20:14.12+00:00

Driver Version

  • mssql-jdbc-11.2.3.jre17.jar
  • mssql-jdbc-12.6.0.jre11.jar

SQL Server Version

  • 2022

Java Version

  • 17

発生した問題

複数行INSERTをするSQLで、Decimal型のカラムにNULLをINSERTすると、他のカラムの小数桁部分が四捨五入されるという問題が発生しています。 以下のテーブルを作成し、prepareStatementで記述したSQLを実行すると、[実行結果] のように、1.222は1、1.55は2 のように小数桁部分が四捨五入されてしまいます。

[テーブル]

CREATE TABLE [dbo].[test_decimal] (
[id] bigint identity NOT NULL ,
[col_decimal] decimal(6,3)
PRIMARY KEY ([id])
);

[コード]

public static void main(String[] args) throws Exception {
var connectionString = "jdbc:sqlserver://ホスト名:1433;databaseName=DB名;"
+ "encrypt=true;trustServerCertificate=true;calcBigDecimalPrecision=true;";
var username = "ユーザー名";
var password = "パスワード";
var sql = "insert into test_decimal values(?,?),(?,?),(?,?)";
try (var con = DriverManager.getConnection(connectionString, username, password);
var pstmt = con.prepareStatement(sql)) {
pstmt.setInt(1, 1);
pstmt.setBigDecimal(2, new BigDecimal("1.222").setScale(3));
pstmt.setInt(3, 2);
pstmt.setBigDecimal(4, null);
pstmt.setInt(5, 3);
pstmt.setBigDecimal(6, new BigDecimal("1.555").setScale(3));
pstmt.execute();
}
}

[実行結果] id col_decimal 1 1.000 2 NULL 3 2.000

質問内容

上記の事象は JDBC Driver の仕様なのでしょうか?また、回避する方法などはありますでしょうか?

SQL Server
SQL Server
Microsoft リレーショナル データベース管理分析システムのファミリで、電子商取引、基幹業務、データ ウェアハウジングなどのソリューションで使用されています。
12 件の質問
0 件のコメント コメントはありません
{count} 件の投票