Setters.java
package org.itsallcode.jdbc.dialect;
import java.sql.PreparedStatement;
import java.time.*;
import java.time.format.DateTimeFormatter;
final class Setters {
    private Setters() {
    }
    static <T> ColumnValueSetter<T> generic() {
        return PreparedStatement::setObject;
    }
    static ColumnValueSetter<LocalDate> localDateToString() {
        return (final PreparedStatement stmt, final int parameterIndex, final LocalDate date) -> stmt
                .setString(parameterIndex, date.toString());
    }
    static ColumnValueSetter<Instant> instantToString(final DateTimeFormatter dateTimeFormatter,
            final ZoneId timeZone) {
        return (final PreparedStatement stmt, final int parameterIndex, final Instant instant) -> stmt
                .setString(parameterIndex, dateTimeFormatter.format(LocalDateTime.ofInstant(instant, timeZone)));
    }
    static ColumnValueSetter<LocalDateTime> localDateTimeToString(final DateTimeFormatter dateTimeFormatter) {
        return (final PreparedStatement stmt, final int parameterIndex, final LocalDateTime localDateTime) -> stmt
                .setString(parameterIndex, dateTimeFormatter.format(localDateTime));
    }
}