设置连接属性

下载 JDBC 驱动程序

可以通过多种方式指定连接字符串的这些属性:

  • 使用 DriverManager 类进行连接时,作为连接 URL 字符串中的<name>=<value> 属性。 有关连接字符串的语法,请参阅生成连接 URL

  • 作为 <name>=<value>DriverManager 类中 Connect 方法的 Properties 参数中的属性。

  • 驱动程序数据源的适当的 setter 方法中指定值。 例如:

    datasource.setServerName(value)
    datasource.setDatabaseName(value)
    

备注

  • 属性名称不区分大小写。 驱动程序按以下顺序解析重复的属性名称:

    1. API 参数,例如 userpassword
    2. 属性集合
    3. 连接字符串中的最后一个实例
  • 可以对属性名称使用未知值。 JDBC 驱动程序不会验证区分大小写。

  • 可以使用同义词。 驱动程序按顺序解决这些问题,就如同它处理重复的属性名称一样。

  • Microsoft JDBC Driver for SQL Server 采用连接属性的服务器默认值,但 ANSI_DEFAULTSIMPLICIT_TRANSACTIONS 除外。 适用于SQL Server的 Microsoft JDBC 驱动程序自动将 ANSI_DEFAULTS 设置为 ON,并将 IMPLICIT_TRANSACTIONS 设置为 OFF

  • 如果将身份验证 ActiveDirectoryPassword [DEPRECATED]设置为以下库,请在 classpath 中包括以下库: microsoft-authentication-library-for-java。 在 Maven 存储库上找到它。 下载此库及其依赖项的最简单方法是使用 Maven:

    1. 在系统上安装 Maven。
    2. 转到驱动程序的 GitHub 页面
    3. 下载pom.xml文件。
    4. 运行以下 Maven 命令以下载库及其依赖项: mvn dependency:copy-dependencies

属性

以下部分介绍 JDBC 驱动程序当前可用的所有连接字符串属性。

accessToken

  • 类型String
  • 默认null

(版本 6.0+)借助此属性,可以使用访问令牌连接到数据库。 你无法通过连接 URL 设置 accessToken

accessTokenCallbackClass

  • 类型String
  • 默认null

(版本 12.4+)要与访问令牌回调一起使用的回调实现类的名称。

applicationIntent

  • 类型String
  • 默认ReadWrite

(版本 6.0+)声明应用程序工作负载类型来连接到服务器。

可能的值为 ReadOnlyReadWrite

有关灾难恢复的详细信息,请参阅 JDBC 驱动程序对高可用性和灾难恢复的支持

applicationName

  • 类型String [<=128 char]
  • 默认null

如果未提供名称,应用程序名称将为“Microsoft JDBC Driver for SQL Server”。

使用此名称可在各种SQL Server分析和日志记录工具中标识特定应用程序。

身份验证

  • 类型String
  • 默认NotSpecified

(版本 6.0+)此可选属性指示用于连接的身份验证方法。

可能的值包括ActiveDirectoryIntegratedActiveDirectoryManagedIdentity(版本 12.2+)、(版本 7.2+)、 ActiveDirectoryMSIActiveDirectoryInteractive (版本 9.2+)、 ActiveDirectoryServicePrincipal (版本 9.2+)ActiveDirectoryPassword [DEPRECATED]SqlPassword和默认值NotSpecified

使用 ActiveDirectoryIntegrated(版本 6.0+)通过集成的 Windows 认证连接到 SQL。

使用 ActiveDirectoryManagedIdentity (版本 12.2+) 或 ActiveDirectoryMSI (版本 7.2+) 从 Azure 资源内部连接到 SQL。 例如,使用托管标识身份验证的 Azure 虚拟机、应用服务或 Function App。

使用 ActiveDirectoryManagedIdentityActiveDirectoryMSI 身份验证模式时驱动程序支持的两种类型的托管标识包括:

  • 系统分配的托管标识:在默认情况下用于获取 accessToken

  • User-Assigned 托管标识:用于获取 accessToken,如果使用 msiClientId 连接属性指定了托管标识的客户端 ID。

使用 ActiveDirectoryInteractive 连接到数据库,采用交互式身份验证流。

使用 ActiveDirectoryServicePrincipal(版本 9.2+)通过服务主体身份的客户端 ID 和密钥连接到数据库。 在 userName 属性中指定客户端 ID,并在属性中 password 指定机密(10.2+)。

使用版本 12.4+ 的 ActiveDirectoryServicePrincipalCertificate ,通过服务主体标识的客户端 ID 和证书连接到数据库。 在 userName 属性中指定客户端 ID,并在属性中 clientCertificate 指定证书的路径。

有关更多选项,请参阅 使用 ActiveDirectoryServicePrincipalCertificate 身份验证模式进行连接

使用 ActiveDirectoryPassword [DEPRECATED] 通过 Microsoft Entra 主体名和密码连接到 SQL。

ActiveDirectoryPassword 已弃用。

有关详细信息,请参阅使用 ActiveDirectoryPassword 身份验证模式进行连接

使用SqlPassworduserName/user 以及 password 属性连接到 SQL。

如果不需要这些身份验证方法,请使用 NotSpecified

重要

如果将身份验证设置为 ActiveDirectoryIntegrated,则必须安装以下两个库:mssql-jdbc_auth-<version>-<arch>.dll(在 JDBC 驱动程序包中可用)和Microsoft 身份验证库 SQL Server(ADAL.DLL)。 可以从 Download ODBC Driver for SQL ServerDownload Microsoft OLE DB Driver for SQL Server 安装Microsoft 身份验证库。 JDBC 驱动程序仅支持 ADAL.Dll 版本 1.0.2028.318 及更高版本 。

将身份验证属性设置为非NotSpecified的任何值时,驱动程序默认使用传输层安全协议(TLS),以前称为安全套接字层协议(SSL)加密。

有关如何配置 Microsoft Entra 身份验证的信息,请参阅 Microsoft Entra 身份验证用于 Azure SQL

authenticationScheme

  • 类型String
  • 默认NativeAuthentication

指示您的应用程序要使用哪一种集成安全性。

可能的值是JavaKerberosNTLM(版本 7.4+)和默认值NativeAuthentication

NativeAuthentication会导致驱动程序在Windows上加载 mssql-jdbc_auth-<version>-<arch>.dll(例如,mssql-jdbc_auth-8.2.2.x64.dll),用于获取集成身份验证信息。

在使用驱动程序版本 6.0 到 7.4 时,加载的本机身份验证库被命名为 sqljdbc_auth.dll

使用authenticationScheme=JavaKerberos时,必须在serverNameserverSpn属性中指定完全限定的域名(FQDN)。 否则,将出现错误(Kerberos 数据库中找不到服务器)。

有关使用 authenticationScheme=JavaKerberos 的详细信息,请参阅 使用 Kerberos 集成身份验证连接到 SQL Server

使用 authenticationScheme=NTLM 时,必须使用 domaindomainName 属性、useruserName 属性中的Windows凭据和 password 属性指定Windows域。 否则,就会出错(必须指定连接属性)。

bulkCopyForBatchInsertAllowEncryptedValueModifications

  • 类型Boolean [true | false]
  • 默认false

版本 12.10+ 中,当你将 useBulkCopyForBatchInsert 设置为 true 时,请将该选项设置为 true,以便在不解密数据的情况下在表或数据库之间批量复制加密数据。

有关使用此属性的详细信息和警告,请参阅 allowEncryptedValueModifications中的 选项。

bulkCopyForBatchInsertBatchSize

  • 类型int
  • 默认0

(版本 12.10+)将 useBulkCopyForBatchInsert 设置为 true 时,此属性指定驱动程序从批处理插入操作创建的大容量复制操作的批处理大小。

有关此设置效果的详细信息,请参阅 BatchSize中的 选项。

bulkCopyForBatchInsertCheckConstraints

  • 类型Boolean [true | false]
  • 默认false

(版本 12.10+)使用 useBulkCopyForBatchInsert=true时,将此选项 true 设置为在插入数据时启用检查约束。 将此选项设置为 false 禁用检查约束。

有关此设置效果的详细信息,请参阅 CheckConstraints中的 选项。

bulkCopyForBatchInsertFireTriggers

  • 类型Boolean [true | false]
  • 默认false

(版本 12.10+)当你使用useBulkCopyForBatchInsert=true时,将此选项设置为true,即可在将行插入到数据库时触发插入触发器。 将此选项设置为 false 禁用插入触发器。

有关此设置效果的详细信息,请参阅 FireTriggers中的 选项。

bulkCopyForBatchInsertKeepIdentity

  • 类型Boolean [true | false]
  • 默认false

(版本 12.10+)使用 useBulkCopyForBatchInsert=true时,将此选项设置为 true 在插入数据时保留源标识值。 将选项设置为false,使目标分配标识值。

有关此设置效果的详细信息,请参阅 KeepIdentity中的 选项。

bulkCopyForBatchInsertKeepNulls(批量插入时保持空值的批量复制功能)

  • 类型Boolean [true | false]
  • 默认false

(版本 12.10+)使用 useBulkCopyForBatchInsert=true时,请将此选项设置为 true 保留目标表中的 null 值,而不考虑默认值设置。 将此选项设置为 false 允许目标默认值替换 null 值。

有关此设置效果的详细信息,请参阅 KeepNulls中的 选项。

bulkCopyForBatchInsertTableLock

  • 类型Boolean [true | false]
  • 默认false

(版本 12.10+)当您将useBulkCopyForBatchInsert设置为true时,将此选项配置为true,以便在大容量复制操作期间获取批量更新锁。 将此选项设置为 false 使用行锁。

有关此设置效果的详细信息,请参阅 TableLock中的 选项。

cacheBulkCopyMetadata

  • 类型Boolean [true | false]
  • 默认false

(版本 12.8+)使用 useBulkCopyForBatchInsert=true时,此属性告知驱动程序是否应在连接级别缓存目标列元数据。 如果设置为 true,请确保目标在批量插入之间不会更改,因为驱动程序没有处理此更改的方法。

calcBigDecimalPrecision

  • 类型Boolean [true | false]
  • 默认false

(版本 12.6+)此标志用于指示驱动程序是否应为 BigDecimal 输入计算精度,而不是使用允许的最大精度值(38)。

cancelQueryTimeout

  • 类型int
  • 默认-1

(版本 6.4+)使用此属性可取消连接上的设置 queryTimeout。 如果与服务器的 TCP 连接被静默断开,查询执行将停止响应,并且不会引发异常。 仅当连接上也设置了queryTimeout 时,此属性才适用。

驱动程序等待总秒数 cancelQueryTimeout + queryTimeout ,以删除连接并关闭通道。

此属性的默认值为 -1,行为是无限期等待。

clientCertificate

  • 类型String
  • 默认null

(版本 8.4+)指定要用于客户端证书身份验证的证书的位置。 JDBC 驱动程序支持 PFX、PEM、DER 和 CER 文件扩展名。

有关详细信息,请参阅环回方案的客户端证书身份验证

clientKey

  • 类型String
  • 默认null

(版本 8.4+)指定由属性指定的 PEM、DER 和 CER 证书的 clientCertificate 私钥的位置。

有关详细信息,请参阅环回方案的客户端证书身份验证

clientKeyPassword

  • 类型String
  • 默认null

(版本 8.4+)指定用于访问 clientKey 文件的私钥的可选密码字符串。

有关详细信息,请参阅环回方案的客户端证书身份验证

columnEncryptionSetting

  • 类型String [Enabled | Disabled]
  • 默认Disabled

(版本 6.0+)将 Enabled 设置为使用 Always Encrypted(AE)功能。 启用 AE 后,JDBC 驱动程序以透明方式加密和解密存储在服务器中的加密数据库中的敏感数据。

有关 Always Encrypted 的详细信息,请参阅 将 Always Encrypted 与 JDBC 驱动程序配合使用

注意

Always Encrypted 适用于 SQL Server 2016 或更高版本和Azure SQL 数据库。

concatNullYieldsNull

  • 类型String [ON | OFF]
  • 默认ON

(版本 13.2+)当您将此选项设置为OFF时,驱动程序在建立连接时会将数据库会话变量CONCAT_NULL_YIELDS_NULL设置为OFF。 结果是,将 null 值与字符串连接会生成字符串本身(null 值被视为空字符串)。

有关详细信息,请参阅 SET CONCAT_NULL_YIELDS_NULL

connectRetryCount

  • 类型int [0..255]
  • 默认1

(版本 9.4+)发生连接失败时的重新连接尝试次数。

connectRetryInterval

  • 类型int [1..60]
  • 默认10

(版本 9.4+)每次连接重试尝试之间的秒数。

databaseName、database

  • 类型String [<=128 char]
  • 默认null

要连接到的数据库名称。

如果未指定数据库名称,连接将使用默认数据库。

datetimeParameterType

  • 类型String [datetime | datetime2 | datetimeoffset]
  • 默认datetime2

(版本 12.2+)用于Java日期和时间时间戳参数的 SQL 数据类型。

连接到 SQL Server 2016 或更高版本并与旧版 datetime 值交互时,请将此属性设置为 datetime。 此设置可缓解datetime值和datetime2值在服务器端的转换问题。

有关详细信息,请参阅从 SQL Server 2016 开始的 datetime 到 datetime2 转换行为变化

delayLoadingLobs

  • 类型Boolean [true | false]
  • 默认true

用于指示是否将从 ResultSet 检索到的所有 LOB 对象进行流传输的标志。 将此属性设置为 false 在不流式处理的情况下将整个 LOB 对象加载到内存中。

disableStatementPooling

  • 类型Boolean [true | false]
  • 默认true

指示是否应使用语句池化的标志。

domainName, domain

  • 类型String
  • 默认null

(版本 7.4+)使用 NTLM 身份验证时要验证的 Windows 域。

enablePrepareOnFirstPreparedStatementCall(在首次调用 PreparedStatement 时启用准备)

  • 类型Boolean [true | false]
  • 默认false

true设置为通过调用sp_prepexec以在已准备语句第一次执行时启用准备语句句柄的创建。

false设置为使已准备语句在首次执行时调用sp_executesql而不准备语句。 如果发生第二次执行,它会调用 sp_prepexec 来设置准备好的语句句柄。

enclaveAttestationProtocol

  • 类型String
  • 默认null

(版本 8.2+)此可选属性指示要用于具有安全 Enclave 的 Always Encrypted 的证明协议。 目前,此字段唯一支持的值是 HGSAAS并且 NONENONE 仅在版本 11.2+ 中受支持)。

有关 Always Encrypted 与安全封闭区的详细信息,请参阅 将安全封闭区与 JDBC 驱动程序结合使用的 Always Encrypted

enclaveAttestationUrl

  • 类型String
  • 默认null

(版本 8.2+)此可选属性指示要用于具有安全 Enclave 的 Always Encrypted 的证明服务终结点 URL。

有关 Always Encrypted 与安全封闭区的详细信息,请参阅 将安全封闭区与 JDBC 驱动程序结合使用的 Always Encrypted

加密

  • 类型String
  • 默认null

设置为 true,指定如果服务器安装了证书,SQL 数据库引擎对客户端和服务器之间发送的所有数据使用 TLS 加密。 默认值在版本 10.2 及以上版本中为 true,在版本 9.4 及以下版本中为 false

在版本 6.0 及更新中,默认使用 TLS 加密的新连接设置 authentication

有关此属性的详细信息,请参阅该 authentication 属性。

在版本 11.2.0 及更高版本中,将encryptBoolean更改为string,当属性设置为strict时支持 TDS 8.0。

版本 10.2 中的默认更改是一项重大更改。 如果要从 9.4 或更早版本升级,并且服务器没有有效的 TLS 证书,请设置为trustServerCertificatetrue或提供有效的证书。

failoverPartner

  • 类型String
  • 默认null

在数据库镜像配置中使用的故障转移服务器名称。 在到主体服务器的初始连接失败时,使用此属性。 建立初始连接后,会忽略此属性。 必须与databaseName属性一起使用。

注意

驱动程序不支持故障转移伙伴实例的服务器实例端口号作为连接字符串中 failoverPartner 属性的一部分。 但是,驱动程序支持在同一连接字符串中指定主体服务器实例的 serverNameinstanceNameportNumber 属性以及故障转移伙伴实例的 failoverPartner 属性。

如果在 Server 连接属性中指定虚拟网络名称,则无法使用数据库镜像。

有关灾难恢复的详细信息,请参阅 JDBC 驱动程序对高可用性和灾难恢复的支持

Fips

  • 类型Boolean [true | false]
  • 默认false

将此属性设置为已启用 FIPS 的 Java 虚拟机(JVM)的 true

fipsProvider

  • 类型String
  • 默认null

在 JVM 中配置的 FIPS 提供程序,例如 BCFIPS 或 SunPKCS11-NSS。 在版本 6.4.0 中删除。

有关详细信息,请参阅 GitHub 问题 460

gsscredential

  • 类型org.ietf.jgss.GSSCredential
  • 默认null

(版本 6.2+)通过此属性传递 Kerberos 受限委派的用户凭据。

将此设置与integratedSecurity作为true一起使用,并将JavaKerberos作为authenticationScheme

hostNameInCertificate

  • 类型String
  • 默认null

用于验证 SQL Server TLS/SSL 证书的主机名。

此选项 hostNameInCertificate 可用于在证书中使用的名称与传入 serverName 属性的名称不匹配的情况下指定主机名。 但是,如果存在匹配项, hostNameInCertificate 则不应使用该选项。

如果 hostNameInCertificate 属性未指定或设置为 null,则 SQL Server Microsoft JDBC Driver for SQL Server 使用连接 URL 上的 serverName 属性值作为主机名来验证 SQL Server TLS/SSL 证书。

注意

如前一段所述,除非确认证书中的名称或名称与在选项中hostNameInCertificate传递的名称不匹配,否则不要设置serverName该选项。

将此属性与encryptauthenticationtrustServerCertificate属性结合使用。 当连接使用 TLS 加密并且 trustServerCertificate 设置为 false 时,此属性会影响证书验证。 确保传递给 hostNameInCertificate 的值与服务器证书中的“使用者备用名称”(SAN)中的公用名(CN)或 DNS 名称匹配,以便 TLS 连接成功。

有关加密支持的详细信息,请参阅了解加密支持

instanceName

  • 类型String [<=128 char]
  • 默认null

要连接的数据库实例名称。 如果未指定此属性,请连接到默认实例。 对于同时指定 instanceName 和端口的情况,请参阅端口的说明。

如果在 Server 连接属性中指定虚拟网络名称,则不能使用 instanceName 连接属性。

有关灾难恢复的详细信息,请参阅 JDBC 驱动程序对高可用性和灾难恢复的支持

integratedSecurity

  • 类型Boolean [true | false]
  • 默认false

设置为 true,指示Windows操作系统上的SQL Server使用Windows凭据。 如果 true,JDBC 驱动程序会在本地计算机凭据缓存中搜索用户登录到计算机或网络时提供的凭据。

设置为 true(带有 authenticationscheme=JavaKerberos),以指示SQL Server使用 Kerberos 凭据。

若要详细了解 Kerberos 身份验证,请参阅使用 Kerberos 集成身份验证连接到 SQL Server

设置为 true(带有 authenticationscheme=NTLM),以指示SQL Server使用 NTLM 凭据。

如果 false,必须提供用户名和密码。

ipaddresspreference

  • 类型String [<=128 char]
  • 默认IPv4First

客户端应用程序使用的 IP 首选项。

使用 IPV4First时,驱动程序首先遍历 IPv4 地址。 如果没有 IPv4 地址能够成功连接,驱动程序将继续尝试 IPv6 地址(如果有)。

使用 IPV6First时,驱动程序首先遍历 IPv6 地址。 如果没有 IPv6 地址能够成功连接,驱动程序将继续尝试 IPv4 地址(如果有)。

使用 UsePlatformDefault时,驱动程序会按照 DNS 解析的初始顺序遍历所有 IP 地址。

jaasConfigurationName

  • 类型String
  • 默认SQLJDBCDriver

(版本 6.2+)SQL Server 的每个连接都可以使用自己的 JAAS 登录配置名称来建立 Kerberos 连接。 可以通过此属性传递配置条目的名称。 创建 Kerberos 配置文件时,请使用此属性。 默认情况下,驱动程序查找名称 SQLJDBCDriver

如果驱动程序找不到外部配置,它将为 IBM JVM 设置 useDefaultCcache=true,为其他 JVM 设置 useTicketCache=true

keyStoreAuthentication

  • 类型String
  • 默认null

(版本 6.0+)此属性确定了要用于 Always Encrypted 的密钥存储,并确定了用于验证密钥存储的身份验证机制。 驱动程序支持在设置 keyStoreAuthentication=JavaKeyStorePassword 时无缝设置Java密钥存储。 若要使用此属性,还必须设置Java密钥存储的 keyStoreLocationkeyStoreSecret 属性。

从 Microsoft JDBC Driver 8.4 开始,可以将 keyStoreAuthentication=KeyVaultManagedIdentitykeyStoreAuthentication=KeyVaultClientSecret 设置为使用托管标识对Azure 密钥保管库进行身份验证。

有关 Always Encrypted 的详细信息,请参阅 将 Always Encrypted 与 JDBC 驱动程序配合使用

keyStoreLocation

  • 类型String
  • 默认null

(版本 6.0+)当keyStoreAuthentication=JavaKeyStorePassword时,keyStoreLocation 属性用于标识存储用于 Always Encrypted 数据的列主密钥的 Java 密钥库文件路径。 路径必须包含密钥存储文件名。

有关 Always Encrypted 的详细信息,请参阅 将 Always Encrypted 与 JDBC 驱动程序配合使用

keyStorePrincipalId

  • 类型String
  • 默认null

(版本 8.4+)keyStoreAuthentication=KeyVaultManagedIdentity时,keyStorePrincipalId 属性指定有效的Microsoft Entra应用程序客户端 ID。

有关 Always Encrypted 的详细信息,请参阅 将 Always Encrypted 与 JDBC 驱动程序配合使用

keyStoreSecret

  • 类型String
  • 默认null

(版本 6.0+)当 keyStoreAuthentication=JavaKeyStorePassword 时,keyStoreSecret 属性指定用于密钥库和密钥的密码。 使用Java密钥存储时,密钥存储和密钥密码必须相同。

有关 Always Encrypted 的详细信息,请参阅 将 Always Encrypted 与 JDBC 驱动程序配合使用

lastUpdateCount

  • 类型Boolean [true | false]
  • 默认true

true 仅返回传递给服务器的 SQL 语句中的上次更新计数。 仅将此值与单个SELECTINSERTDELETE或语句一起使用,以忽略服务器触发器可能导致的其他更新计数。 将此属性设置为 false 返回所有更新计数,包括服务器触发器返回的更新计数。

注意

此属性仅适用于将它与 executeUpdate 方法一起使用时。 所有其他 execute 方法返回所有结果和更新计数。 此属性仅影响服务器触发器返回的更新计数。 它不会影响触发器执行过程中产生的结果集或错误。

lockTimeout

  • 类型int
  • 默认-1

在数据库报告锁定超时之前等待的毫秒数。 默认行为是无限期等待。 如果未为此属性指定值,则此值是连接上所有语句的默认值。

或者,使用 Statement.setQueryTimeout() 设定特定语句的查询超时。 该值可为 0,这表示无需等待。

loginTimeout

  • 类型int [0..65535]
  • 默认值30 (版本 11.2 及更高版本)或 15 版本 10.2 及更低版本)

因连接失败而中止连接之前驱动程序应等待的秒数。 零值表示该超时为默认系统超时。 此值为 30 秒(版本 11.2 及更高版本中的默认值)或 15 秒(版本 10.2 及更早版本中的默认值)。 非零值为因连接失败而中止连接之前驱动程序应等待的秒数。

如果在 Server 连接属性中指定了虚拟网络名称,请将超时值设定为 3 分钟或更长,以确保故障转移连接成功。

有关灾难恢复的详细信息,请参阅 JDBC 驱动程序对高可用性和灾难恢复的支持

maxResultBuffer

  • 类型String
  • 默认null

(版本 9.2+)用于 maxResultBuffer 设置读取结果集时要读取的最大字节数。 如果未指定此值,驱动程序将读取整个结果集。 可以使用两种样式指定大小:

  • 以字节为单位的大小(例如,100150M300K400G)。
  • 作为最大堆内存的百分比(例如, 10p15pct20percent)。

msiClientId

  • 类型String
  • 默认null

(已弃用)(版本 7.2+)用于获取accessToken以通过ActiveDirectoryManagedIdentityActiveDirectoryMSI身份验证模式建立连接的托管标识(MSI)客户端 ID。

multiSubnetFailover

  • 类型Boolean [true | false]
  • 默认false

始终指定 multiSubnetFailover=true 以连接到SQL Server可用性组或SQL Server故障转移群集实例的可用性组侦听器。 multiSubnetFailover=true 配置驱动程序,以便更快地检测和连接到活动服务器。

可能的值为 truefalse

有关灾难恢复的详细信息,请参阅 JDBC 驱动程序对高可用性和灾难恢复的支持

可以使用 multiSubnetFailovergetMultiSubnetFailoversetMultiSubnetFailover 以编程方式访问连接属性。

注意

从 SQL Server Microsoft JDBC Driver 6.0 开始,不再需要将 multiSubnetFailover 设置为 true 以连接到可用性组侦听器。 默认情况下启用的新属性 transparentNetworkIPResolution提供对活动服务器的检测和连接。

packetSize

  • 类型int [-1 | 0 | 512..32767]
  • 默认8000

用来与服务器通信的网络包大小(以字节为单位)。 值为 -1 指示使用服务器的默认数据包大小。 值为 0 则指示使用最大值 32767。 如果将此属性设置为超出可接受的范围的值,则会发生异常。

重要

启用加密时不要使用 packetSize 属性(encrypt=true)。 否则,驱动程序可能引发连接错误。

有关此属性的详细信息,请参阅 SQLServerDataSource 类的 setPacketSize 方法。

password

  • 类型String [<=128 char]
  • 默认null

如果您使用 SQL 用户和密码进行连接,那么请使用数据库密码。

对于具有主体名称和密码的 Kerberos 连接,请将此属性设置为 Kerberos 主体密码。

(版本 10.2+)authentication=ActiveDirectoryServicePrincipal时,password 属性标识用于Active Directory主体的密码。

portNumber、port

  • 类型int [0..65535]
  • 默认1433

服务器侦听的端口。 如果在连接字符串中指定端口号,则不发出对 SQLbrowser 的请求。 当您同时指定端口和instanceName时,连接将建立在指定的端口上。 但是,instanceName 被验证,如果与端口不匹配,则会引发错误。

重要

始终指定端口号,因为它比使用 SQLbrowser 更安全。

prepareMethod

  • 类型String [prepexec | prepare | scopeTempTablesToConnection | none]
  • 默认prepexec

(版本 11.2.0+)指定驱动程序在使用预备语句时使用的底层准备方法。

prepare设置为sp_prepare以用作准备方法。 将 prepareMethod 设置为此值会导致对数据库进行单独的初始访问,来准备没有任何初始值的语句,供数据库在执行计划中考虑。 将prepexec设置为sp_prepexec以用作准备方法。 此方法将准备操作与第一次执行相结合,从而减少往返次数。 它还为数据库提供数据库可以在执行计划中考虑的初始参数值。

(版本 13.4.0+)将 scopeTempTablesToConnection 设置为通过使用文本参数替换而不是服务器端准备句柄来限制在预备语句中创建的临时表的作用范围。 设置为通过 none SQL 批处理执行强制实施文本参数替换,绕过服务器端准备的语句句柄(sp_prepexec / sp_prepare)。

限制和免责声明:scopeTempTablesToConnectionnone

这些 prepareMethod 选项适用于兼容性和迁移方案,不适用于常规性能使用。

  • 没有服务器端准备语句;SQL 始终作为批处理执行。
  • 需要FORCED_PARAMETERIZATION来实现有效的计划重用。
  • 参数内联为文本而不是绑定类型。
  • 数值精度和数值范围可能与服务器端参数绑定不同。
  • 日期和时间值被驱动程序格式化为字符串。
  • 大型字符串参数会增加 SQL 文本大小和内存使用量。
  • BLOB 和 CLOB 参数可能会导致内存使用率高或内存不足的情况。
  • SQL Server在 SQL 分析时推断参数数据类型。
  • 由于文本值的差异,查询计划可能会有所不同。
  • 在执行时而不是在绑定时检测到错误。
  • 执行的 SQL 包括文本值,在服务器跟踪和日志中可见。

queryTimeout

  • 类型int
  • 默认-1

查询发生超时之前要等待的秒数。 默认值为 -1,表示无期限超时。 将此值设置为 0 也表示无限期等待。

quotedIdentifier

  • 类型String [ON | OFF]
  • 默认ON

(版本 13.2+)当您将此选项设置为OFF时,驱动程序在建立连接时会将数据库会话变量QUOTED_IDENTIFIER设置为OFF。 数据库将双引号视为字符文本的字符串分隔符,并且不能将标识符括在双引号中。

有关详细信息,请参阅 SET QUOTED_IDENTIFIER

  • 类型String
  • 默认null

(版本 9.4+)Kerberos 身份验证的领域。 设置此值将替代驱动程序从服务器的领域自动检测的 Kerberos 身份验证领域。

复制

  • 类型Boolean [true | false]
  • 默认false

(版本 9.4+)此设置告知服务器此连接是否用于复制。 启用后,带有 NOT FOR REPLICATION 选项的触发器不会在连接时触发。

responseBuffering

  • 类型String [full | adaptive]
  • 默认adaptive

如果将此属性 adaptive设置为,驱动程序会在必要时缓冲最小数据量。 默认模式为 adaptive.

如果将此属性 full设置为,驱动程序在执行语句时会从服务器读取整个结果集。

注意

从 JDBC 驱动程序版本 1.2 开始,默认缓冲行为为 adaptive。 若要在应用程序中使用版本 1.2 默认行为,请将responseBuffering属性设置为full连接属性或 SQLServerStatement 类对象的 setResponseBuffering 方法。

selectMethod

  • 类型String [direct | cursor]
  • 默认direct

如果将此属性设置为 cursor,驱动程序将在连接 TYPE_FORWARD_ONLYCONCUR_READ_ONLY 上为其创建的每个查询创建一个数据库游标。 通常,仅当应用程序生成无法完全容纳在客户端内存中的大型结果集时,才需要此属性。 如果将此属性 cursor设置为,驱动程序在客户端内存中只保留有限的结果集行数。

默认情况下,驱动程序将所有结果集行保留在客户端内存中。 当应用程序处理所有行时,此默认行为提供最快的性能。

sendStringParametersAsUnicode

  • 类型Boolean [true | false]
  • 默认true

如果将 sendStringParametersAsUnicode 属性设置为 true,驱动程序会以 Unicode 格式将字符串参数发送到服务器。

如果将属性sendStringParametersAsUnicode设置为false,驱动程序会以非 Unicode 格式(如 ASCII 或 MBCS)将字符串参数发送到服务器,而不是 Unicode。

sendStringParametersAsUnicode 属性的默认值是 true

注意

驱动程序仅在发送具有 sendStringParametersAsUnicodeCHARVARCHAR JDBC 类型的参数值时,检查 LONGVARCHAR 属性。 新的 JDBC 4.0 国家字符方法包括 setNStringsetNCharacterStreamsetNClob 方法,它们属于 SQLServerPreparedStatement 类SQLServerCallableStatement 类。 无论此属性的设置如何,这些方法始终将它们的参数值以 Unicode 格式发送到服务器。

为了在使用 CHARVARCHARLONGVARCHAR JDBC 数据类型时获得最佳性能,应用程序应将 sendStringParametersAsUnicode 属性设置为 false,并使用 setStringsetCharacterStreamsetClob 这些非国家字符方法来操作 SQLServerPreparedStatement 类SQLServerCallableStatement 类

当应用程序将 sendStringParametersAsUnicode 属性 false 设置为非国家字符方法并使用非国家字符方法访问服务器端的 Unicode 数据类型时(例如 ncharnvarcharntext),如果数据库排序规则不支持非国家字符方法传递的参数中的 String 字符,则某些数据可能会丢失。

应用程序应为 setNStringsetNCharacterStreamsetNClob JDBC 数据类型,使用 NCHAR 国家字符方法,以及 NVARCHARLONGNVARCHAR

更改此值可能会影响数据库中的结果排序。 排序差异源于 Unicode 与非 Unicode 字符的排序规则不同。

sendTemporalDataTypesAsStringForBulkCopy

  • 类型Boolean [true | false]
  • 默认true

(版本 8.4+)当您将此连接属性设置为 false 时,驱动程序会将 DATEDATETIMEDATETIME2DATETIMEOFFSETSMALLDATETIMETIME 数据类型以各自的类型发送,而不是将它们作为 String 发送。

将此连接属性 false设置为时,驱动程序接受每个临时数据类型的默认字符串文本格式,例如:

  • DATE: YYYY-MM-DD
  • DATETIME: YYYY-MM-DD hh:mm:ss[.nnn]
  • DATETIME2: YYYY-MM-DD hh:mm:ss[.nnnnnnn]
  • DATETIMEOFFSET: YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+/-}hh:mm]
  • SMALLDATETIME: YYYY-MM-DD hh:mm:ss
  • TIME: hh:mm:ss[.nnnnnnn]

sendTimeAsDatetime

  • 类型Boolean [true | false]
  • 默认true

SQL Server JDBC Driver 3.0 中添加了此属性。

  • 设置为 true,以将 java.sql.Time 值作为 SQL Server datetime 值发送到服务器。

  • 设置为 false,以将 java.sql.Time 值作为 SQL Server time 值发送到服务器。

此属性的默认值目前在 true 将来的版本中可能会更改。

有关 Microsoft JDBC Driver for SQL Server 如何在将java.sql.Time 值发送到服务器之前配置这些值的详细信息,请参阅配置如何发送 java.sql.Time 值

服务器证书,服务器

  • 类型String
  • 默认null

(11.2.0 及更高版本)服务器证书文件的路径。 当您将 encrypt 设置为 strict 时,驱动程序使用此证书进行验证。 驱动程序支持使用 PEM 文件格式的证书文件。

serverName、server

  • 类型String
  • 默认null

运行 SQL Server 或 Azure SQL 数据库的计算机。

此外还可指定可用性组的虚拟网络名称。

有关灾难恢复的详细信息,请参阅 JDBC 驱动程序对高可用性和灾难恢复的支持

serverNameAsACE

  • 类型Boolean [true | false]
  • 默认false

(版本 6.0+)将true设置为以表明驱动程序应将 Unicode 服务器名称转换为与 ASCII 兼容的编码(Punycode)用于连接。 如果此设置是 false,驱动程序将使用所提供的服务器名称进行连接。

有关国际功能的详细信息,请参阅 JDBC 驱动程序的国际功能

serverPreparedStatementDiscardThreshold

  • 类型int
  • 默认10

(版本 6.2+)使用此属性可以控制在驱动程序清理服务器上的未完成句柄之前,每个连接上能同时存在多少未完成的已准备语句放弃操作(sp_unprepare)。

如果将此属性 <= 1设置为,驱动程序会立即对准备语句关闭执行未准备的操作。 如果将属性 > 1设置为,驱动程序会将这些调用批处理在一起,以避免调用 sp_unprepare 过多的开销。

serverSpn

  • 类型String
  • 默认null

(版本 4.2+)使用此可选属性为 Java Kerberos 连接指定服务主体名称(SPN)。 将其与 authenticationScheme 一起使用。

若要指定 SPN,请使用以下形式:MSSQLSvc/fqdn:port@REALM其中 fqdn 是完全限定的域名,端口是端口号,REALM 是与 SQL Server 相关的 Kerberos 领域,且需使用大写字母。

注意

如果客户端的默认领域(如 Kerberos 配置中指定的)与SQL Server的 Kerberos 领域相同,则 @REALM是可选的。

有关将 serverSpn 与 Java Kerberos 配合使用的详细信息,请参阅 使用 Kerberos 集成身份验证连接到 SQL Server

socketFactoryClass

  • 类型String
  • 默认null

(版本 8.4+)指定自定义套接字工厂要使用的类名称,而不是默认套接字工厂。

socketTimeout

  • 类型int
  • 默认0

套接字读取或接受操作超时前的等待毫秒数。 默认值为 0,表示无期限超时。

statementPoolingCacheSize

  • 类型int
  • 默认0

(版本 6.4+)使用此属性在驱动程序中启用准备的语句句柄缓存。

此属性定义语句池缓存的大小。

仅在将 disableStatementPooling 设置为 false 时,使用此属性。 disableStatementPooling设置为truestatementPoolingCacheSize设置为 0 会禁用已准备的语句句柄缓存。

sslProtocol

  • 类型String
  • 默认TLS

(版本 6.4+)使用此属性可以指定要在安全连接期间考虑的 TLS 协议。

可能的值为: TLSTLSv1TLSv1.1TLSv1.2

有关安全套接字层协议的详细信息,请参阅 SSLProtocol

透明网络IP解析

  • 类型Boolean [true | false]
  • 默认true

(版本 6.0+)此属性提供对活动服务器的更快检测和连接。 将其设置为 truefalse。 默认值为 true

在 Microsoft 为 SQL Server 提供的 JDBC Driver 6.0 之前,应用程序必须设置连接字符串以包含 multiSubnetFailover=true,以指示它正在连接到 Always On 可用性组。 如果不将连接关键字multiSubnetFailover设置为true,应用程序在连接到 Always On 可用性组时可能会遇到超时。 从版本 6.0 开始,不再需要将应用程序设置为 multiSubnetFailovertrue

注意

使用联合身份验证或指定 multisubnetfailover时,驱动程序默认禁用 transparentNetworkIPResolution 。 若要启用此功能,请显式将 transparentNetworkIPResolution 设置为 true

第一次尝试连接时,将使用500毫秒作为超时时间。 后续的尝试将使用与multiSubnetFailover属性相同的超时逻辑。

trustManagerClass

  • 类型String
  • 默认null

(版本 6.4+)自定义 javax.net.ssl.TrustManager 实现的完整限定类名。

trustManagerConstructorArg

  • 类型String
  • 默认null

(版本 6.4+)一个要传递到 TrustManager 构造函数的可选参数。 如果指定 trustManagerClass 属性并请求加密连接,驱动程序将使用自定义 TrustManager 而不是默认系统 JVM 密钥存储的 TrustManager。

trustServerCertificate

  • 类型Boolean [true | false]
  • 默认false

true 设置为指定驱动程序不验证服务器的 TLS/SSL 证书。

  • 如果为 true,则在使用 TLS 加密通信层时会自动信任服务器 TLS/SSL 证书。

  • 如果为 false,则驱动程序会验证服务器 TLS/SSL 证书。 如果服务器证书验证失败,驱动程序将引发错误并关闭连接。 默认值为 false。 确保传递给 serverName 的值与服务器证书中使用者备用名称中的公用名(CN)或 DNS 名称完全匹配,以便 TLS/SSL 连接成功。

有关加密支持的详细信息,请参阅了解加密支持

注意

将此属性与encrypt属性和authentication属性一起使用。 当连接使用 TLS 加密时,此属性才会影响服务器 TLS/SSL 证书验证。

trustStore

  • 类型String
  • 默认null

证书 trustStore 文件的路径(包括文件名)。 该文件 trustStore 包含客户端信任的证书列表。

如果未指定此属性或将其设置为 null,驱动程序将使用信任管理器工厂的查找规则来确定要使用的证书存储。

默认的 SunX509 TrustManagerFactory 尝试按以下搜索顺序查找受信任的材料

  1. JVM 系统属性指定的 javax.net.ssl.trustStore 文件。
  2. <java-home>/lib/security/jssecacerts 文件。
  3. <java-home>/lib/security/cacerts 文件。

有关 SUNX509 TrustManager 接口的详细信息,请参阅 Sun Microsystems 网站上的 SUNX509 TrustManager 接口文档。

注意

仅当连接使用 TLS 加密且trustStore属性设置为 trustServerCertificate 时,此属性才会影响证书false查找。

trustStorePassword

  • 类型String
  • 默认null

用于检查数据完整性 trustStore 的密码。

如果设置 trustStore 属性但未设置 trustStorePassword 属性,驱动程序不会检查属性 trustStore的完整性。

如果未指定 trustStoretrustStorePassword 属性,驱动程序将使用 JVM 系统属性, javax.net.ssl.trustStore 以及 javax.net.ssl.trustStorePassword。 如果未指定 javax.net.ssl.trustStorePassword 系统属性,驱动程序不会检查系统 trustStore属性的完整性。

如果未设置 trustStore 属性,但设置 trustStorePassword 属性,JDBC 驱动程序将使用指定为信任存储的文件 javax.net.ssl.trustStore 。 驱动程序使用指定的 trustStorePassword值检查信任存储的完整性。 如果客户端应用程序不希望在 JVM 系统属性中存储密码,则需要此设置。

注意

如果连接使用 TLS 且trustStorePassword属性设置为trustStore,则trustServerCertificate属性只影响证书false查找。

trustStoreType

  • 类型String
  • 默认JKS

设置此属性可以指定要用于 FIPS 模式的信任存储类型。

可能的值是 PKCS12 或者由 FIPS 提供程序定义的类型。

useBulkCopyForBatchInsert

  • 类型Boolean [true | false]
  • 默认false

(版本 9.2+)启用此连接属性时,驱动程序会透明地使用大容量复制 API 执行使用java.sql.PreparedStatement的批处理插入操作。 此功能可提供更好的性能。

默认情况下,该功能被禁用。 将此属性设置为 true 启用它。

重要

此功能仅支持完全参数化 INSERT 查询。 如果将 INSERT 查询与其他 SQL 查询结合,或者查询包含数据值,则执行将回退到基本批处理插入操作。

有关如何使用此属性的详细信息,请参阅 使用批量复制 API 进行批量插入操作

useDefaultGSSCredential

  • 类型Boolean [true | false]
  • 默认false

(版本 12.6+)此标志指示驱动程序是否应代表用户创建 GSSCredential,以便使用本机 GSS-API 进行 Kerberos 身份验证。

useDefaultJaasConfig

  • 类型Boolean [true | false]
  • 默认false

(版本 12.6+)当应用程序与在系统级别配置 JAAS 的库一起时,请将此属性设置为 true 允许驱动程序使用相同的配置来执行 Kerberos 身份验证。

useFmtOnly

  • 类型Boolean [true | false]
  • 默认false

(版本 7.4+)提供了一种从服务器查询参数元数据的替代方法。 将此属性设置为 true 指定驱动程序在查询参数元数据时应使用 SET FMTONLY 逻辑。 此功能默认处于禁用状态,不建议使用此属性,因为 SET FMTONLY 已标记为要弃用。 useFmtOnly 仅可作为用于sp_describe_undeclared_parameters已知问题和限制的解决方法。

此功能目前只支持单个 SELECT/INSERT/UPDATE/DELETE 查询。 尝试将此功能与不受支持的/多个查询配合使用会导致驱动程序尝试分析查询,但最有可能导致异常。

有关此属性的详细信息,请参阅通过 useFmtOnly 检索 ParameterMetaData

userName,用户

  • 类型String [<=128 char]
  • 默认null

如果您使用 SQL 用户名和密码进行连接,那么连接的就是数据库用户。

对于使用主体名称和密码的 Kerberos 连接,请将此属性设置为 Kerberos 主体名称。

(版本 10.2+)authentication=ActiveDirectoryServicePrincipal时,userName 属性指定有效的Microsoft Entra安全客户端 ID。

vectorTypeSupport

  • 类型String [v2 | v1 | off]
  • 默认v1

(版本 13.2+)设置为指定 off 服务器以 JSON 格式将矢量类型作为字符串数据发送,并 v1 指定服务器以向量数据的形式发送矢量类型 FLOAT32 。 默认值为 v1

(版本 13.4+)设置 v2 以启用对 FLOAT32FLOAT16 向量的本机向量类型支持。 FLOAT16向量在网络传输中使用 IEEE-754 半精度序列化格式,并在 Java 中表示为 Float[] 数组。

有关详细信息,请参阅 将矢量数据类型与 JDBC 驱动程序配合使用

workstationID

  • 类型String [<=128 char]
  • 默认<empty string>

工作站编号。 使用此 ID 标识各种分析和日志记录工具中的特定工作站。

如果未指定值,则默认值为 <empty string>

xopenStates

  • 类型Boolean [true | false]
  • 默认false

true设置为使驱动程序在异常中返回符合XOPEN标准的状态代码。

默认将返回 SQL 99 状态代码。