私はSpring JDBCに対応しようとしていますが、これらの匿名クラスを使用しているとバグが発生します。最終的なものでない限り、ローカル変数を渡すことができないため、簡単に配置できますが、配列またはコレクションをループする必要がある場合はどうなりますか? 「FedModel fm」はループ内で再初期化されるため、最終的であると宣言することはできませんが、execute メソッドを 100 回呼び出す必要があります。これは、私が問題を抱えている具体的なシナリオです。BLOB をデータベースに挿入する方法が他にないためです。
for (int i = 0; i < fedModels.size(); i++) {
FedModel fm = fedModels.get(i);
jdbcTemplate.execute("INSERT INTO items (name, video_blob) VALUES (?, ?)",
new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
protected void setValues(PreparedStatement ps, LobCreator lobCreator)
throws SQLException {
ps.setString(1, fm.getName());
ps.setString(2, fm.getDifficultyLevel());
ps.setString(3, fm.getEquipment());
lobCreator.setBlobAsBinaryStream(ps, paramIndex, contentStream, contentLength);
}
});
}
私が考えることができる唯一のことは、AbstractLobCreatingPreparedStatementCallback を拡張し、内部でループを実行できるように fedModels のコンストラクターを追加する静的なネストされたクラスを作成することです。ただし、JDBC のみを使用する方が簡単です。