class JdbcStorageAccessor extends AbstractJdbcStorageAccessor {
    private final DataSource dataSource;

    JdbcStorageAccessor(@NonNull DataSource dataSource, @NonNull String tableName) {
        super(tableName);
        this.dataSource = requireNonNull(dataSource, "dataSource can not be null");
    }

    @Override
    protected <T> T executeCommand(
            String sql, SqlFunction<PreparedStatement, T> body, BiFunction<String, SQLException, T> exceptionHandler) {<FILL_FUNCTION_BODY>}
}

        try (Connection connection = dataSource.getConnection()) {
            boolean originalAutocommit = connection.getAutoCommit();
            if (!originalAutocommit) {
                connection.setAutoCommit(true);
            }
            try (PreparedStatement statement = connection.prepareStatement(sql)) {
                return body.apply(statement);
            } catch (SQLException e) {
                return exceptionHandler.apply(sql, e);
            } finally {
                // Cleanup
                if (!originalAutocommit) {
                    connection.setAutoCommit(false);
                }
            }
        } catch (SQLException e) {
            return exceptionHandler.apply(sql, e);
        }
    
<methods>public void <init>(java.lang.String) ,public boolean extend(net.javacrumbs.shedlock.core.LockConfiguration) ,public boolean insertRecord(net.javacrumbs.shedlock.core.LockConfiguration) ,public void unlock(net.javacrumbs.shedlock.core.LockConfiguration) ,public boolean updateRecord(net.javacrumbs.shedlock.core.LockConfiguration) <variables>private final non-sealed java.lang.String tableName