001package org.itsallcode.jdbc.statement; 002 003import java.sql.PreparedStatement; 004import java.sql.SQLException; 005 006/** 007 * A {@link PreparedStatement} that delegates calls to 008 * {@link #setObject(int, Object)} to a setter provided by 009 * {@link ParamSetterProvider#findSetter(Object)}. 010 */ 011public class ConvertingPreparedStatement extends DelegatingPreparedStatement { 012 private final PreparedStatement originalDelegate; 013 private final ParamSetterProvider paramSetterProvider; 014 015 /** 016 * Create a new instance. 017 * 018 * @param delegate delegate 019 * @param paramSetterProvider parameter setter provider 020 */ 021 public ConvertingPreparedStatement(final PreparedStatement delegate, 022 final ParamSetterProvider paramSetterProvider) { 023 super(delegate); 024 this.originalDelegate = delegate; 025 this.paramSetterProvider = paramSetterProvider; 026 } 027 028 @Override 029 public void setObject(final int parameterIndex, final Object x) throws SQLException { 030 paramSetterProvider.findSetter(x) 031 .setObject(originalDelegate, parameterIndex, x); 032 } 033}