Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер Microsoft Java Database Connectivity (JDBC) для SQL Server — это драйвер JDBC типа 4 (чистый Java, напрямую использует протокол SQL Server TDS, не требуются нативные библиотеки), который позволяет любому Java приложению или серверу подключаться к Microsoft SQL ядро СУБД в База данных SQL Azure, SQL database в Fabric, Управляемый экземпляр SQL Azure и во всех поддерживаемых версиях и редакциях SQL Server (включая Express Editions). Он реализует стандартные API JDBC и работает с основными серверами приложений Java, включая IBM WebSphere и SAP NetWeaver.
Выберите начальную точку
- Чтобы настроить среду разработки Java и запустить первый запрос, начните с шага 1. Настройка среды разработки, шаг 2. Создание базы данных SQL и шаг 3. Подтверждение концепции подключения к SQL с помощью Java.
- Чтобы подключиться к Azure SQL с проверкой подлинности без пароля, начните с подключения с помощью проверки подлинности Microsoft Entra и создания URL-адреса подключения.
- Чтобы добавить драйвер в Maven, Gradle или другую сборку, перейдите к разделу "Скачать Microsoft JDBC Driver for SQL Server".
- Чтобы сделать существующее приложение устойчивым к временным сбоям, перейдите в раздел "Устойчивость подключения " и "Настраиваемая логика повторных попыток".
- Чтобы диагностировать проблему подключения или запроса, перейдите к разделу "Диагностика проблем с драйвером JDBC " и устранение неполадок подключения.
Производственные базовые показатели для Azure SQL
Используйте этот фрагмент в качестве отправной точки для рабочего Azure SQL подключения. Он загружает имя сервера и имя базы данных из конфигурации приложения, например Служба приложений Azure параметры приложения, переменные среды или файл конфигурации, и задает остальные свойства подключения программным способом. Конфигурация сочетает Transport Layer Security (TLS), управляемое удостоверение, повторные попытки подключения при временных сбоях, быстрое восстановление группы аварийного переключения, увеличенный тайм-аут входа, чтобы учесть аварийное переключение после холодного запуска, и настраиваемую логику повторных попыток (CRL) для операторов, которые сталкиваются с троттлингом Azure SQL или аварийным переключением в середине выполнения запроса.
Для повышения безопасности и упрощения горизонтального масштабирования сохраните сведения о подключении за пределами кода. В рабочей среде храните сведения о подключении в системе конфигурации приложения и используйте Azure Key Vault для конфиденциальных значений и параметров централизованно управляемого подключения. Дополнительные сведения см. в разделе "Защита строк подключения".
В фрагментах кода Java в этой статье для краткости опущены импорты и объявления классов.
// Load endpoint details from application configuration. In Azure App Service,
// these can come from app settings or Key Vault-backed settings.
String serverName = System.getenv("SQL_SERVER_NAME");
String databaseName = System.getenv("SQL_DATABASE_NAME");
String port = System.getenv().getOrDefault("SQL_PORT", "1433");
if (serverName == null || databaseName == null) {
throw new IllegalStateException(
"Set SQL_SERVER_NAME and SQL_DATABASE_NAME in your application configuration.");
}
String url = "jdbc:sqlserver://" + serverName + ":" + port;
Properties props = new Properties();
props.setProperty("databaseName", databaseName);
props.setProperty("encrypt", "true");
props.setProperty("trustServerCertificate", "false");
props.setProperty("authentication", "ActiveDirectoryManagedIdentity");
props.setProperty("loginTimeout", "120"); // 90 is the minimum floor for this retry profile; 120 leaves practical failover margin
props.setProperty("connectRetryCount", "5"); // retry transient connection failures up to 5 times (default 1)
props.setProperty("connectRetryInterval", "15"); // 15 seconds between connection retries (default 10)
props.setProperty("multiSubnetFailover", "true"); // recommended for any Azure SQL HA listener
// props.setProperty("applicationIntent", "ReadOnly"); // uncomment to route to a readable secondary
// Retry deadlocks and lock timeouts, plus Azure SQL throttling and mid-query failover.
props.setProperty("retryExec", "1205,1222:3,5+5;40501,40613,40197,10928,10929,49918:4,5*2");
try (Connection conn = DriverManager.getConnection(url, props);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 1")) {
while (rs.next()) {
System.out.println(rs.getInt(1));
}
}
Этот фрагмент предназначен для групп автоматического переключения База данных SQL Azure и Управляемый экземпляр SQL Azure.
Устанавливайте multiSubnetFailover=true только при подключении к прослушивателю группы аварийного переключения, прослушивателю группы доступности или к конечной точке экземпляра отказоустойчивого кластера. Использование этого свойства для конечных точек, не являющихся прослушивателями высокой доступности (HA), может снизить производительность и не поддерживается. Дополнительные сведения см. в статье о поддержке драйвера JDBC для обеспечения высокой доступности, аварийного восстановления.
Фрагмент кода не задает retryConn, так как драйвер уже по умолчанию повторяет попытки при наиболее распространенных временных ошибках подключения Azure SQL (в том числе 4060, 40197, 40501, 40613, 49918, 49919, 49920, 10928 и 10929) при наличии connectRetryCount и connectRetryInterval. Полный список см. в списке встроенных временных ошибок подключения. Добавьте retryConn с +<errorNumber> только в том случае, если нужно добавить в список ошибку, которая ещё не охвачена, или задайте для него значение <errorNumber> (без начального +), чтобы заменить его. Если вы помещете то же значение в URL-адрес JDBC, заключите его как retryConn={+<errorNumber>} или retryConn={<errorNumber>}.
Свойство retryExec состоит из двух частей, написанных как rule1;rule2 при программном настройке. Если вы помещаете то же значение в URL-адрес JDBC, заключите каждое правило в фигурные скобки следующим образом {rule1};{rule2}:
{1205,1222:3,5+5}выполняет повторные попытки для запросов, завершившихся ошибкой «жертва взаимоблокировки» (1205), и тайм-аутом запроса блокировки (1222), три раза с линейной задержкой 5, 10 и 15 секунд. В 1205 году SQL Server откатывает транзакцию, прежде чем драйвер увидит ошибку, поэтому повторное выполнение одной инструкции безопасно. Если инструкция, ставшая жертвой взаимоблокировки, была частью транзакции из нескольких инструкций, то предыдущие инструкции тоже были отменены, а CRL не выполняет их повторно, поэтому оберните всю транзакцию в собственный цикл повторных попыток. 1222 оставляет транзакцию открытой, а повторный запуск инструкции на уровне инструкции выполняется только внутри исходной транзакции; Если вам также нужно привязать длительность транзакции, заключите всю транзакцию в собственный цикл повторных попыток.{40501,40613,40197,10928,10929,49918:4,5*2}повторяет попытки при ошибках троттлинга Azure SQL, переключения на резервный ресурс в середине выполнения запроса и ограничения ресурсов четыре раза с экспоненциально увеличивающимися интервалами ожидания: 5, 10, 20 и 40 секунд. Эти ошибки входят во встроенный список временных ошибок для цикла connect, но именноretryExecперехватывает их, если они возникают в середине выполнения запроса при уже установленном соединении. Интервалы ожидания CRL ограничены значениемqueryTimeout. Если вы устанавливаете значениеqueryTimeoutменьше, чем следующее запланированное время ожидания, драйвер прекращает попытки раньше времени и повторно выбрасывает исключение. Выберите параметрqueryTimeout, который как минимум равен суммарному времени ожидания CRL плюс времени выполнения оператора, или смиритесь с тем, что самые длинные задержки при повторных попытках не сработают.
Для групп отработки отказа База данных SQL Azure, именованных реплик Hyperscale и масштабирования чтения, а также прослушивателей групп доступности Always On задайте applicationIntent=ReadOnly, если требуется подключаться к доступной для чтения вторичной реплике. Для суверенных облаков, в которых альтернативное имя субъекта сертификата (SAN) не содержит имя узла, к которому вы подключаетесь, также задайте hostNameInCertificate так, чтобы оно совпадало с ним (например, *.database.usgovcloudapi.net для Azure для государственных организаций).
Дополнительные сведения о каждой части этой конфигурации см. в следующей статье:
- Создание URL-адреса подключения
- Настройте свойства подключения
- Подключитесь, используя аутентификацию Microsoft Entra
- Устойчивость подключения
- Настраиваемая логика повторных попыток
- Поддержка драйвером JDBC высокой доступности и аварийного восстановления
- Общие сведения о свойствах времени ожидания в драйвере JDBC
Каталог временных ошибок Azure SQL см. в разделе "Устранение временных ошибок подключения".
Ключевые особенности
-
JDBC на основе стандартов: драйвер типа 4. Сборка JRE 11+ реализует JDBC 4.2, а также методы границ запроса JDBC 4.3 (
beginRequest,endRequest) и вспомогательные функции экранированияStatement. API сегментирования JDBC 4.3 (setShardingKey, семействоcreateConnectionBuilder) выдают исключениеSQLFeatureNotSupportedException. JRE 8 поддерживает JDBC 4.2. Сведения о разбивке по версиям и полном списке поддерживаемых и неподдерживаемых методов версии 4.3 см. в Java и поддержке спецификаций JDBC. - Поддержка широкой платформы: выполняется на любой платформе с поддерживаемой Java виртуальной машины (JVM), включая Windows, Linux и macOS.
-
Зашифрованные по умолчанию подключения с шифрованием TLS в
encrypt=trueкачестве значения по умолчанию для текущих драйверов. - Аутентификация Microsoft Entra ID: подключения без пароля с использованием управляемого удостоверения, субъекта-службы, интерактивного потока, интегрированного потока, цепочки учетных данных по умолчанию и потока токена доступа.
- Kerberos: встроенная проверка подлинности для локальная служба Active Directory.
- NTLM: проверка подлинности Windows по схеме запрос-ответ для сценариев вне домена или устаревших сценариев.
- Always Encrypted: шифрование на стороне клиента для конфиденциальных столбцов с необязательными безопасными анклавами для операций на месте.
-
Массовое копирование: высокопроизводительная вставка с использованием API
SQLServerBulkCopyи производительность пакетной вставки дляexecuteBatch. -
Устойчивость подключения: встроенные повторные попытки подключения для временных ошибок, а также настраиваемая логика повторных попыток для инструкций (
retryExec) и настраиваемый список ошибок подключения (retryConn). - Поддержка расширенных SQL Server типов данных: datetimeoffset, sql_variant, JSON, пространственных, векторных, табличных параметров и определяемых пользователем типов.
Get started
| Статья | Description |
|---|---|
| Требования к системе | Поддерживаемые версии Java, операционной системы и SQL Server. |
| Матрица поддержки | Подробная матрица совместимости для выпусков драйверов JDBC. |
| Скачивание драйвера Microsoft JDBC для SQL Server | Ссылки для скачивания, координаты Maven и артефакты релиза. |
| Начало работы с драйвером JDBC | Установите драйвер, настройте среду и запустите первый запрос. |
| Общие сведения о JDBC Driver | Архитектура, поддерживаемые функции и соответствие спецификации JDBC. |
Настройка и подключение
| Статья | Description |
|---|---|
| Подключение к SQL Server с помощью JDBC Driver | Откройте подключение к экземпляру SQL Server из Java. |
| Подключение к базе данных SQL Azure | Подключите приложение Java к База данных SQL Azure. |
| Создание URL-адреса подключения | Полный справочник по синтаксису и свойствам URL-адресов jdbc:sqlserver://. |
| Настройте свойства подключения | Все свойства подключения, значения по умолчанию и их настройка. |
| Настройка свойств источника данных | Настройте SQLServerDataSource для использования с JNDI и серверами приложений. |
| Работа с подключением | Корректно открывайте, повторно используйте и закрывайте подключения. |
| Использование пулов подключений | Источники данных JNDI и интеграция с внешними пулами. |
| Устойчивость подключения | Встроенные повторные попытки подключения и обнаружение разрыва соединения. |
| Настраиваемая логика повторных попыток | Повторите неудавшиеся инструкции с помощью retryExec и настройте список повторных попыток подключения с помощью retryConn. |
| Общие сведения о свойствах времени ожидания в драйвере JDBC |
loginTimeout, queryTimeout, тайм-ауты сокета и то, как они взаимодействуют. |
| Развертывание JDBC Driver | Упаковайте и разверните драйвер с помощью приложения. |
Authenticate
| Статья | Description |
|---|---|
| Аутентификация Microsoft Entra | Аутентификация с помощью управляемой идентификации, субъекта-службы, интерактивная, интегрированная и с использованием маркера доступа. |
| Встроенная проверка подлинности Kerberos | Подключитесь к Kerberos и Active Directory. |
| Проверка подлинности NTLM | Используйте учетные данные NTLM для проверки подлинности. |
| Проверка подлинности сертификата клиента для сценариев обратного цикла | Аутентификация клиентов с помощью сертификатов в loopback-подключениях. |
Secure
| Статья | Description |
|---|---|
| Защита приложений JDBC Driver | Руководство по безопасности для приложений Java, использующих драйвер. |
| Безопасность приложений | Рекомендации по модели угроз и глубокой защите. |
| Защита строк подключений | Сохраняйте учетные данные и строки подключения вне источника. |
| Настройка шифрования на клиенте | Корневые сертификаты доверия, закрепление сертификатов и параметры TLS. |
| Подключение с шифрованием | Принудительно выполните encrypt=true и проверьте сертификат сервера. |
| Основные сведения о поддержке шифрования | Как драйвер согласовывает TLS с SQL Server. |
| Проверка данных, введенных пользователем | Параметризируйте SQL и избегайте внедрения. |
| Режим FIPS | Запустите драйвер в средах, совместимых с FIPS. |
| Всегда зашифрованный | Настройте шифрование на стороне клиента для конфиденциальных столбцов. |
| Всегда зашифровано с безопасными анклавами | Включить расширенные возможности работы с зашифрованными столбцами. |
| Справочник по API Always Encrypted | Область API для поставщиков шифрования столбцов и хранилищ ключей. |
Работа с данными
| Статья | Description |
|---|---|
| Работа с инструкциями и результирующими наборами | Основы Statement, PreparedStatement и наборов результатов. |
| Использование инструкций с JDBC Driver | Запустите параметризованные и не параметризованные инструкции. |
| Обработка сложных инструкций | Хранимые процедуры, несколько результатов и количество обновлений. |
| Работа с результирующими наборами | Перебирайте, обновляйте и прокручивайте результаты запроса. |
| Использование нескольких результирующих наборов | Обработка запросов, возвращающих несколько результирующих наборов. |
| Основные сведения о типах курсоров | Однонаправленные, прокручиваемые и обновляемые курсоры. |
| Использование табличных параметров | Передайте TABLE параметры в хранимые процедуры. |
| Использование массового копирования с помощью JDBC Driver | Высокопроизводительная вставка с помощью SQLServerBulkCopy. |
| API массового копирования для пакетной вставки | Ускорение executeBatch рабочих INSERT нагрузок. |
| Выполнение пакетных операций | Пакетные вставки, обновления и удаления. |
Типы данных
| Статья | Description |
|---|---|
| Работа с типами данных | Сопоставление типов Java с типами SQL Server. |
| Общие сведения о типах данных драйвера JDBC | Система типов драйвера и сопоставление с JDBC. |
| Преобразования типов данных | Неявные и явные преобразования между Java и SQL Server. |
| Различия типов данных | Крайние случаи при сопоставлении типов на границе. |
| Тип данных JSON | Хранение и запрос столбцов JSON. |
| Типы пространственных данных | Используйте геометрию и географию из Java. |
| Векторный тип данных | Работа с типом SQL Server vector. |
| sql_variant | Чтение и запись столбцов типа sql_variant. |
| Определяемые пользователем типы | Используйте пользовательские типы CLR из Java. |
| Поддержка национального набора символов | Обработка Unicode и столбцы nvarchar. |
| Международные функции | Аспекты локали, сортировки и глобализации. |
Транзакции и параллелизм
| Статья | Description |
|---|---|
| Выполнение транзакций |
commit, rollback, и семантика автоматической фиксации. |
| Основные сведения о транзакциях | Жизненный цикл транзакций и рекомендации. |
| Уровни изоляции | Снимок, чтение подтверждённых данных, сериализуемость и другие. |
| Управление параллелизмом | Оптимистические и пессимистичные стратегии параллелизма. |
| Блокировка строк | Как SQL Server принимает и освобождает блокировки строк. |
| Использование точек сохранения | Частичный откат в рамках транзакции. |
| Управление размером транзакций | Настройте область транзакции, чтобы избежать длительных блокировок. |
| Транзакции XA | Двухфазная фиксация с SQLServerXADataSource. |
Производительность и надежность
| Статья | Description |
|---|---|
| Повышение производительности и надежности | Настройка индексов, запросов и параметров драйвера. |
| Кэширование метаданных подготовленной инструкции | Повторно используйте подготовленные планы инструкций. |
| Производительность параметров подготовленного запроса | Типизация параметров и повторное использование плана выполнения. |
| Адаптивная буферизация | Передавайте большие столбцы в потоковом режиме без их полной загрузки в память. |
| Закрытие неиспользуемых объектов | Незамедлительно освободите ресурсы Statement, ResultSet и Connection. |
| Высокий уровень доступности и аварийное восстановление | Прослушиватели групп доступности и отработка отказа в нескольких подсетях. |
| Зеркалирование базы данных | Используйте драйвер с партнерами по зеркалированию базы данных. |
Диагностика и устранение неполадок
| Статья | Description |
|---|---|
| Диагностика проблем с JDBC Driver | Трассировка, логирование и типичные сценарии сбоев. |
| Устранение неполадок с подключением | Ошибки подключения, ошибки TLS-согласования и именованные экземпляры. |
| Трассировка работы драйвера | Включите ведение журнала JDK для драйвера. |
| Регистратор производительности и функция обратного вызова | Сбор метрик производительности для каждой инструкции. |
| Журнал расширенных событий | Сопоставляйте ошибки клиента с расширенными событиями на стороне сервера. |
| Обработка ошибок |
SQLException, коды ошибок и подсказки повторных попыток. |
Связанные задачи
| Статья | Description |
|---|---|
| Заметки о выпуске | История версий и что нового в каждом выпуске. |
| Зависимости компонентов | Необязательные зависимости для Entra ID, Kerberos, Always Encrypted и других. |
| Соответствие JDBC 4.3 | Соответствие API JDBC 4.3. |
| Соответствие JDBC 4.2 | Соответствие API JDBC 4.2. |
| Соответствие JDBC 4.1 | Соответствие API JDBC 4.1. |
| Соответствие требованиям и юридическая информация | Соответствие спецификациям и лицензированию. |
| Справочник по API JDBC Driver | Классы, интерфейсы, методы и поля, предоставляемые драйвером. |
| Примеры приложений JDBC Driver | Сквозные примеры кода. |
| FAQ | Часто задаваемые вопросы. |