Skip to content

Microsoft JDBC Driver 13.6 for SQL Server is now available

Microsoft JDBC Driver 13.6 for SQL Server is now available. This release helps Java applications get more work from the same infrastructure, diagnose latency with better context, strengthen critical connection paths, and adopt the latest capabilities in SQL Server and Azure SQL.


Version 13.6 includes everything you saw in the 13.5 preview cycle and the final compatibility, security, performance, and quality work completed for general availability. Existing applications keep the established JDBC programming model, while teams can opt into new capabilities.


What you get in 13.6


If you run…

You get…

Large, wide, or numeric-heavy queries

Less allocation and garbage collection work in the ResultSet read path

High-concurrency parameterized workloads

New parameter length hints that can reduce oversized SQL Server memory grants

Always Encrypted with secure enclaves

Cached Column Encryption Key lookups that reduce remote key-store calls

Production performance telemetry

Nanosecond timing and SQL, statement, application, and pool context

Azure SQL Hyperscale reader endpoints

Automatic routing to named read replicas with the correct database context

Vector, JDK 26, or cross-driver migration projects

Stronger vector validation, JDK 26 support, and more portable connection strings


Spend less time and memory moving data


Data access performance matters at application scale because small costs in a hot path repeat for every value in every row. Driver 13.6 reduces allocations and unnecessary work across several frequently used paths:



  • ResultSet processing uses faster paths for common synchronous reads.

  • DECIMAL, NUMERIC, MONEY, and SMALLMONEY decoding creates fewer temporary objects.

  • Common string and BigDecimal operations avoid intermediate allocations.

  • Driver API entry and exit logging avoids work when detailed logging isn’t enabled.


These changes are automatic. Applications don’t need a new connection property or code change to benefit. Workloads that read large, wide, or numeric-heavy result sets should see lower garbage collection pressure and more consistent throughput.


Always Encrypted with secure enclaves also gets a targeted performance improvement. Enclave queries now reuse Column Encryption Keys through the driver’s existing symmetric key cache instead of returning to the key store for the same key on every execution. For deployments backed by Azure Key Vault or another remote key store, this reduces network round trips, lowers query latency, and helps avoid key-store throttling under load.


Give SQL Server better parameter size information


Prepared statements can be efficient on the client and still request more server memory than the query needs. When the driver doesn’t know the expected length of a varchar, nvarchar, char, nchar, varbinary, or binary parameter, it can send a much larger type definition than the application typically uses. SQL Server then uses that declared width when estimating row size and memory grants.


Driver 13.6 lets applications provide parameter length hints through:



  • SQLServerPreparedStatement.defineParameterType(int parameterIndex, int sqlType, int maxLength)

  • Existing setObject overloads that accept scaleOrLength


Accurate length information can reduce oversized memory grants, leave more workspace memory available for concurrent queries, and improve throughput when many parameterized statements run at the same time.


The two APIs serve different needs. defineParameterType sets an enforced parameter definition when the application knows the contract. The setObject length value is an advisory hint for supported character and binary types. If a value is larger than the hint, the driver widens the definition rather than truncating data. Applications that don’t provide a hint keep the existing behavior.


Connect performance events to the work that produced them


The performance logging callback now provides more of the context needed to investigate latency in production:



  • Optional nanosecond timing for fine-grained measurements

  • The current SQL text

  • The current statement type

  • The connection’s applicationName


The callback still uses millisecond timing by default, and the new methods preserve compatibility with existing callback implementations.


This additional context helps telemetry systems answer practical questions: Which pool or application emitted the event? Was the operation a prepared statement or another statement type? Which SQL text was executing when time accumulated in authentication, network I/O, request construction, or server response?


Strengthen security without changing application behavior


Security hardening spans authentication, encryption, XML processing, class loading, Java Naming and Directory Interface (JNDI), Bulk Copy, and dependencies.


Driver 13.6:



  • Strengthens Always Encrypted secure enclave attestation validation.

  • Omits sensitive connection properties when a SQLServerDataSource creates a JNDI Reference.

  • Applies secure-processing, document type definition, and external-entity protections across SQLXML parser paths.

  • Validates configured Java binary class names before reflective class loading.

  • Escapes multipart destination identifiers before adding them to Bulk Copy and useBulkCopyForBatchInsert SQL.

  • Hardens the ActiveDirectoryInteractive authentication callback flow.

  • Updates optional Bouncy Castle, Azure Identity, Azure Key Vault, and Netty dependencies to pick up security and reliability fixes.


These changes reduce exposure in common enterprise integration points while preserving existing configuration semantics for valid applications.


Scale reads on Azure SQL Hyperscale


Driver 13.6 supports enhanced routing for Azure SQL Hyperscale reader endpoints. The driver can negotiate the enhanced routing capability, follow routing information to a named read replica, and preserve the correct database context when it reconnects.


Applications can use reader endpoints for read scale-out without adding replica-specific routing logic. The server can distribute new connections across named replicas, while the driver handles the network target and database name required for the routed connection. Servers that don’t support enhanced routing continue to use the existing connection behavior.


Managed Identity connections are also more resilient. If a cached Managed Identity or default credential fails to acquire a token, the driver evicts that failed credential. A later connection attempt can create a fresh credential and recover without an application or Java virtual machine restart.


Build AI applications with stronger vector validation


SQL Server and Azure SQL vector support continues to expand in Driver 13.6. The release adds negotiated version validation when applications send vector columns through table-valued parameters.


The driver checks the server’s negotiated vector capability before writing vector metadata or data to the wire. Unsupported vector versions and unsupported FLOAT16 values fail early with a clear driver error. Applications get more predictable behavior for embeddings, vector search, and retrieval-augmented generation workloads, especially when they move between environments with different vector capabilities.


Move configurations between Microsoft data drivers


Teams often share configuration across tools, languages, or application frameworks. Driver 13.6 recognizes additional case-insensitive connection string aliases used by other Microsoft data drivers:


Alias

JDBC property

uid

user

trusted_connection

integratedSecurity

app

applicationName

connectTimeout

loginTimeout

columnEncryption

columnEncryptionSetting

quotedId

quotedIdentifier


Existing JDBC property names continue to work. The aliases reduce configuration changes when applications migrate to JDBC or share settings across Microsoft’s SQL connectivity stack.


Keep existing applications compatible


We preserved the established microsoft.sql.DateTimeOffset type and keeps the existing getDateTimeOffset, setDateTimeOffset, and updateDateTimeOffset APIs free of deprecation annotations. Standard JDBC getObject(…, OffsetDateTime.class) support remains available.


The release also improves compatibility and diagnostics in several application-visible areas:



  • getGeneratedKeys() returns an empty ResultSet when an insert produces no generated key, rather than a row containing NULL.

  • Calling parameter-related methods on a closed prepared or callable statement returns the standard closed-statement SQLServerException instead of a NullPointerException.

  • Repeated metadata discovery avoids an unnecessary failed sp_columns_170 call on servers that don’t support that procedure.

  • Socket, I/O, and custom access-token callback errors retain their original cause chains.

  • Android applications using Conscrypt no longer hang in the affected TLS login path.


Driver 13.6 also adds JDK 26 build and test support. The jre11 artifact supports Java 11 and later versions, including JDK 26. Java 8 applications can continue to use the jre8 artifact.


Get Driver 13.6


For Java 11 and later versions, add the following dependency:


<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>13.6.0.jre11</version>
</dependency>

For Java 8, use version 13.6.0.jre8.


Download the release and review the complete change list:



Download Driver 13.6 and test it with your application’s most important data access paths.

Microsoft Tech Community originally posted this article on 11 September 2026 at 11:00 PM.

Leave a Reply