<a id="jdbc-connector-changelog"></a>

# Changelog for JDBC Source and Sink Connector for Confluent Platform

<style>
.rss-feed-box {
    /\* --cf-surface-01 is white in light mode and a neutral dark surface in
       dark mode (see confluent.css), so unlike a raw palette color this
       needs no explicit [data-theme="dark"] override to read correctly in
       both themes. \*/
    background-color: var(--cf-surface-01);
    border: 1px solid var(--cf-border-subtle);
    border-radius: var(--cf-radius-md);
    padding: 16px 20px;
    margin: 20px 0;
    display: flex;
    align-items: flex-start;
    gap: 16px;
}
.rss-icon {
    width: 24px;
    height: 24px;
    background-color: var(--color-orange-40);
    border-radius: var(--cf-radius-sm);
    display: flex;
    align-items: flex-start;
    justify-content: flex-start;
    flex-shrink: 0;
    transform: rotate(90deg);
}
.rss-icon svg {
    width: 24px;
    height: 24px;
    fill: var(--cf-text-on-color);
}
.rss-feed-rest {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.rss-content {
    color: var(--cf-text-primary);
    font-size: 14px;
    line-height: 1.5;
}
.rss-feed-url-container {
    display: flex;
    align-items: center;
    gap: 8px;
    /\* Explicit hex/palette pair (not a semantic --cf-\* token) because the
       code-block shade here is intentionally lighter/darker than
       --cf-surface-01 above, to read as a distinct "code" region nested
       inside the neutral box. Raw palette tokens don't flip with the theme
       on their own - same explicit [data-theme="dark"] override
       confluent.css uses for its .rst-content note/tip admonitions. \*/
    background-color: var(--color-neutral-10);
    border-radius: var(--cf-radius-sm);
    padding: 10px 14px;
}
[data-theme="dark"] .rss-feed-url-container {
    background-color: var(--color-neutral-80);
}
.rss-feed-url {
    font-family: var(--cf-font-family-mono);
    font-size: 13px;
    color: var(--cf-text-primary);
    word-break: break-all;
    flex: 1;
}
.copy-button {
    background-color: transparent;
    border: none;
    border-radius: var(--cf-radius-sm);
    color: var(--cf-interactive-input);
    cursor: pointer;
    padding: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    transition: background-color 0.2s ease, color 0.2s ease;
}
.copy-button:hover {
    background-color: var(--cf-border-subtle);
}
.copy-button:active {
    transform: scale(0.92);
}
.copy-button.copied {
    color: var(--cf-support-success);
}
.copy-icon {
    width: 16px;
    height: 16px;
    fill: currentColor;
}
.copy-button .icon-check {
    display: none;
}
.copy-button.copied .icon-copy {
    display: none;
}
.copy-button.copied .icon-check {
    display: block;
}
.external-link-icon {
    display: inline-block;
    width: 12px;
    height: 12px;
    margin-left: 4px;
    vertical-align: middle;
}
.rss-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}
</style>

<div class="rss-feed-box">
   <div class="rss-icon"><svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"><path d="M200-120q-33 0-56.5-23.5T120-200q0-33 23.5-56.5T200-280q33 0 56.5 23.5T280-200q0 33-23.5 56.5T200-120Zm480 0q0-117-44-218.5T516-516q-76-76-177.5-120T120-680v-120q142 0 265 53t216 146q93 93 146 216t53 265H680Zm-240 0q0-67-25-124.5T346-346q-44-44-101.5-69T120-440v-120q92 0 171.5 34.5T431-431q60 60 94.5 139.5T560-120H440Z"/></svg></div>
   <div class="rss-feed-rest">
        <div class="rss-content">
            To get the latest product updates delivered to you in an RSS feed, add the URL of this page to your <a href="https://en.wikipedia.org/wiki/News_aggregator" target="_blank" rel="noopener">feed reader<svg class="external-link-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg></a> or add the feed's URL directly
        </div>
        <div class="rss-feed-url-container">
            <div class="rss-feed-url" id="rss-feed-url">https://docs.confluent.io/kafka-connectors/jdbc/10.8/changelog.xml</div>
            <button class="copy-button" onclick="copyRssUrl()" aria-label="Copy RSS feed URL">
                <svg class="copy-icon icon-copy" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"><path d="M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z"/></svg>
                <svg class="copy-icon icon-check" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"/></svg>
                <span class="rss-sr-only copy-text">Copy</span>
            </button>
        </div>
   </div>
</div>

<script>
function copyRssUrl() {
    const url = 'https://docs.confluent.io/kafka-connectors/jdbc/10.8/changelog.xml';
    const button = event.currentTarget;
    const copyText = button.querySelector('.copy-text');

    // Use modern Clipboard API if available
    if (navigator.clipboard && navigator.clipboard.writeText) {
        navigator.clipboard.writeText(url).then(function() {
            button.classList.add('copied');
            copyText.textContent = 'Copied!';
            setTimeout(function() {
                button.classList.remove('copied');
                copyText.textContent = 'Copy';
            }, 2000);
        }).catch(function(err) {
            console.error('Failed to copy: ', err);
            fallbackCopy(url, button, copyText);
        });
    } else {
        fallbackCopy(url, button, copyText);
    }
}

function fallbackCopy(text, button, copyText) {
    // Fallback for older browsers
    const textArea = document.createElement('textarea');
    textArea.value = text;
    textArea.style.position = 'fixed';
    textArea.style.opacity = '0';
    document.body.appendChild(textArea);
    textArea.select();
    try {
        document.execCommand('copy');
        button.classList.add('copied');
        copyText.textContent = 'Copied!';
        setTimeout(function() {
            button.classList.remove('copied');
            copyText.textContent = 'Copy';
        }, 2000);
    } catch (err) {
        console.error('Fallback copy failed: ', err);
    }
    document.body.removeChild(textArea);
}
</script>

## Version 10.8.14

* [PR-1719](https://github.com/confluentinc/kafka-connect-jdbc/pull/1719) - Fix DDL statements
* [PR-1718](https://github.com/confluentinc/kafka-connect-jdbc/pull/1718) - Fix DDL statements
* [PR-1717](https://github.com/confluentinc/kafka-connect-jdbc/pull/1717) - Fix DDL statements
* [PR-1716](https://github.com/confluentinc/kafka-connect-jdbc/pull/1716) - Fix DDL statements
* [PR-1715](https://github.com/confluentinc/kafka-connect-jdbc/pull/1715) - Fix DDL statements
* [PR-1714](https://github.com/confluentinc/kafka-connect-jdbc/pull/1714) - Fix DDL statements
* [PR-1713](https://github.com/confluentinc/kafka-connect-jdbc/pull/1713) - Fix DDL statements
* [PR-1712](https://github.com/confluentinc/kafka-connect-jdbc/pull/1712) - Fix DDL statements
* [PR-1711](https://github.com/confluentinc/kafka-connect-jdbc/pull/1711) - Fix DDL statements

## Version 10.8.13

* [PR-1707](https://github.com/confluentinc/kafka-connect-jdbc/pull/1707) - CC-46266: Fixed sink task failure on JDBC driver `NullPointerException` or `IllegalStateException` during schema/catalog lookup; the connector now reconnects and retries.

## Version 10.8.12

* [PR-1692](https://github.com/confluentinc/kafka-connect-jdbc/pull/1692) - Redact sensitive data (SQL bound values, logged offset maps, and passwords in malformed connection URLs) from connector logs and task-status error messages.

## Version 10.8.11

* [PR-1694](https://github.com/confluentinc/kafka-connect-jdbc/pull/1694) - Use poll.linger.ms for the source task idle backoff while waiting for tables

## Version 10.8.10

* [PR-1691](https://github.com/confluentinc/kafka-connect-jdbc/pull/1691) - Fix high CPU: JDBC source task busy-spins while waiting for table list

## Version 10.8.9

* [PR-1669](https://github.com/confluentinc/kafka-connect-jdbc/pull/1669) - enrich redacted JDBC sink SQL exceptions with non-sensitive diagnostics

## Version 10.8.8

* [PR-1665](https://github.com/confluentinc/kafka-connect-jdbc/pull/1665) - CC-42731: Redacted sensitive data from JDBC sink SQL exception messages written to connector logs

## Version 10.8.7

* [PR-1649](https://github.com/confluentinc/kafka-connect-jdbc/pull/1649) - CC-41006: Preserved the database error reason in `trim.sensitive.log` output for Redshift batched INSERT failures

## Version 10.8.6

* [PR-1642](https://github.com/confluentinc/kafka-connect-jdbc/pull/1642) - CC-41005: honor trim.sensitive.log in JdbcDbWriter exception log sites (10.8.x)
* [PR-1639](https://github.com/confluentinc/kafka-connect-jdbc/pull/1639) - Backport query validation fix to 10.8.x branch

## Version 10.8.5

* [PR-1541](https://github.com/confluentinc/kafka-connect-jdbc/pull/1541) - CC-36742: Implemented provision to use new Java date time APIs
* [PR-1543](https://github.com/confluentinc/kafka-connect-jdbc/pull/1543) - CC-36404: Added support for table include/exclude list regex and timestamp/incrementing column mapping
* [PR-1535](https://github.com/confluentinc/kafka-connect-jdbc/pull/1535) - CC-36403: Introduce internal queue to limit the number of records buffered in-memory

## Version 10.8.4

* [PR-1501](https://github.com/confluentinc/kafka-connect-jdbc/pull/1501) - Enhanced Trace logging to check race condition in Table Fetch and Task configurations
* [PR-1498](https://github.com/confluentinc/kafka-connect-jdbc/pull/1498) - Added validation for table.type:SYNONYMS and support for SYNONYMS types in Microsoft SQL Server JDBC Source connector.

## Version 10.8.3

* [PR-1495](https://github.com/confluentinc/kafka-connect-jdbc/pull/1495) - Timestamp Precision Support for JDBC Sink Connectors
* [PR-1478](https://github.com/confluentinc/kafka-connect-jdbc/pull/1478) - Microsecond Precision timestamp support for JDBC Connectors
* [PR-1483](https://github.com/confluentinc/kafka-connect-jdbc/pull/1483) - Support Large Dates with Nanos Precision
* [PR-1487](https://github.com/confluentinc/kafka-connect-jdbc/pull/1487) - CC-32723: Removed usage of kafka utils mkSet

## Version 10.8.2

* [PR-1481](https://github.com/confluentinc/kafka-connect-jdbc/pull/1481) - use Time.SYSTEM in JbdcSourceTask.java

## Version 10.8.1

* [PR-1477](https://github.com/confluentinc/kafka-connect-jdbc/pull/1477) - ADD: add replace.null.with.default for JdbcSink (#1433)
* [PR-1452](https://github.com/confluentinc/kafka-connect-jdbc/pull/1452) - Update sqlite and postgresql drivers
* [PR-1451](https://github.com/confluentinc/kafka-connect-jdbc/pull/1451) - Enhanced INFO Logging to check for Race Condition

## Version 10.8.0

* [PR-1436](https://github.com/confluentinc/kafka-connect-jdbc/pull/1436) - Add support for Custom Credentials Provider Class in JDBC connectors
