for (int i = 0; i < 3; i++) {
pst.setString(1, "sam" + i);
pst.addBatch();
}
pst.executeBatch();
// こういうエントリがあるべき
assertLogEntry("ms executeBatch INSERT INTO AMSTEST1
VALUES('sam0'), result 1");
assertLogEntry("ms executeBatch INSERT INTO AMSTEST1
VALUES('sam1'), result 1");
assertLogEntry("ms executeBatch INSERT INTO AMSTEST1
VALUES('sam2'), result 1");
// ------- ログ出力 ----------
// 全部パラメータがsam2になってます
## JDBC Debug ##
2004/06/06 01:09:18 22ms executeBatch INSERT INTO
AMSTEST1 VALUES('sam2'), result 1
## JDBC Debug ##
2004/06/06 01:09:18 24ms executeBatch INSERT INTO
AMSTEST1 VALUES('sam2'), result 1
## JDBC Debug ##
2004/06/06 01:09:18 25ms executeBatch INSERT INTO
AMSTEST1 VALUES('sam2'), result 1
ログ出力SQLのパラメータが、すべて最後のパラメータで置き換わってました。
ソースをみると、固定SQLしかリストに足されていないので、
そうなってしまうようです。
addBatchの時点で、置き換えてしまってから、
batchSqlListに足すと、解決できると思います。
// ------- テストコード ----------
PreparedStatement pst =
con.prepareStatement("INSERT INTO AMSTEST1
VALUES(?)");
for (int i = 0; i < 3; i++) {
pst.setString(1, "sam" + i);
pst.addBatch();
}
pst.executeBatch();
// こういうエントリがあるべき
assertLogEntry("ms executeBatch INSERT INTO AMSTEST1
VALUES('sam0'), result 1");
assertLogEntry("ms executeBatch INSERT INTO AMSTEST1
VALUES('sam1'), result 1");
assertLogEntry("ms executeBatch INSERT INTO AMSTEST1
VALUES('sam2'), result 1");
// ------- ログ出力 ----------
// 全部パラメータがsam2になってます
## JDBC Debug ##
2004/06/06 01:09:18 22ms executeBatch INSERT INTO
AMSTEST1 VALUES('sam2'), result 1
## JDBC Debug ##
2004/06/06 01:09:18 24ms executeBatch INSERT INTO
AMSTEST1 VALUES('sam2'), result 1
## JDBC Debug ##
2004/06/06 01:09:18 25ms executeBatch INSERT INTO
AMSTEST1 VALUES('sam2'), result 1