设置连接属性

下载 JDBC 驱动程序

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

  • 在使用 DriverManager 类建立连接时,将其作为 <name>=<value> 属性添加到连接 URL 中。 有关连接字符串的语法,请参阅生成连接 URL。

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

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

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

备注

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

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

  • 可以使用同义词。 驱动程序按顺序解决这些问题,就如同它处理重复的属性名称一样。 从13.6版本开始,驱动还接受以下常见的交叉驱动别名:

    别名 JDBC 属性
    app applicationName
    columnEncryption columnEncryptionSetting
    connectTimeout loginTimeout
    quotedId quotedIdentifier
    trusted_connection integratedSecurity
    uid user

    别名匹配不区分大小写。

  • Microsoft SQL Server JDBC 驱动程序会采用服务器对连接属性的默认值,但 ANSI_DEFAULTS 和 IMPLICIT_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+)要与访问令牌回调一起使用的回调实现类的名称。

(版本 13.6+)值必须是有效的 Java 二进制类名。 驱动程序在尝试加载该类之前会拒绝无效值。

applicationIntent

  • 类型:String
  • 默认:ReadWrite

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

可能的值为 ReadOnly 和 ReadWrite。

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

applicationName

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

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

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

authentication

  • 类型: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。

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

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

  • 用户分配的管理身份:当通过 accessToken 连接属性指定管理身份的客户端 ID 时,用于获取 msiClientId。

使用 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 身份验证模式进行连接。

使用 SqlPassword 通过 userName/user 和 password 属性连接到 SQL。

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

重要

如果将身份验证设置为 ActiveDirectoryIntegrated,则必须安装以下两个库:mssql-jdbc_auth-<version>-<arch>.dll(在 JDBC 驱动程序包中可用)和Microsoft 身份验证库 SQL Server(ADAL.DLL)。 可以从 Download ODBC Driver for SQL Server 或 Download 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时,必须在serverName或serverSpn属性中指定完全限定的域名(FQDN)。 否则,将出现错误(Kerberos 数据库中找不到服务器)。

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

使用 authenticationScheme=NTLM 时,必须使用 domain 或 domainName 属性、user 或 userName 属性中的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

要连接到的数据库名称。

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

defaultTransactionIsolation

  • 类型: String [SNAPSHOT | SERIALIZABLEREPEATABLE_READREAD_COMMITTED | READ_UNCOMMITTED | | ]
  • 默认:null

(版本13.6+)驱动程序在建立连接时应用的交易隔离级别。 值不区分大小写。 如果你不设置这个属性,服务器会使用其默认的事务隔离级别。

你也可以通过在 setDefaultTransactionIsolation 上使用 SQLServerDataSource 方法来配置此属性。

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

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

设置为 true 以启用通过在预编译语句首次执行时调用 sp_prepexec 来创建预编译语句句柄。

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

enclaveAttestationProtocol

  • 类型:String
  • 默认:null

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

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

enclaveAttestationUrl

  • 类型:String
  • 默认:null

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

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

encrypt

  • 类型:String
  • 默认:null

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

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

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

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

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

failoverPartner

  • 类型:String
  • 默认:null

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

注意

驱动程序不支持故障转移伙伴实例的服务器实例端口号作为连接字符串中 failoverPartner 属性的一部分。 但是,驱动程序支持在同一连接字符串中指定主体服务器实例的 serverName、instanceName 和 portNumber 属性以及故障转移伙伴实例的 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 选项。

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

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

instanceName

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

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

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

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

integratedSecurity

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

设置为 true 以指示 SQL Server 在 Windows 操作系统上使用 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。

要从外部 JAAS 配置文件加载该项,将 JVM 系统属性设置为 java.security.auth.login.config 本地文件路径或 file: URI。 从13.6版本开始,驱动拒绝非本地URL,如http:、https:、ldap:jar:、和rmi:URL。 要绕过JVM范围的JAAS配置,使用驱动程序的默认配置,请设置 useDefaultJaasConfig=true。

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

keyStoreAuthentication

  • 类型:String
  • 默认:null

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

从 Microsoft JDBC Driver 8.4 开始,可以将 keyStoreAuthentication=KeyVaultManagedIdentity 或 keyStoreAuthentication=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 分钟或更长,以确保故障转移连接成功。

对于启用自动暂停的 Azure SQL 数据库 serverless,loginTimeout限定的是驱动程序连接重试的范围,而非仅限于单次尝试。 当已用时间加上connectRetryInterval达到loginTimeout时,驱动程序会放弃重试,因此应将其大小设置为足以容纳所需的重试次数。 欲了解更多信息,请参见 连接自动暂停的无服务器数据库。

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

maxResultBuffer

  • 类型:String
  • 默认:null

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

  • 以字节为单位的大小(例如,100、150M、300K400G)。
  • 作为最大堆内存的百分比(例如, 10p, 15pct, 20percent)。

msiClientId

  • 类型:String
  • 默认:null

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

multiSubnetFailover

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

当目标为 Azure SQL 数据库、Azure SQL 托管实例、Microsoft Fabric 中的 SQL 数据库、SQL Server 可用性组的侦听器或 SQL Server 故障转移群集实例时,始终指定 multiSubnetFailover=true。 驱动程序会并行尝试与所有已解析出的 IP 地址建立 TCP 连接,并使用首个成功建立的连接。 当DNS解析到一个地址时,驱动会尝试一次连接,不会启动任何并行连接线程。

可能的值为 true 和 false。

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

可以使用 multiSubnetFailover、getMultiSubnetFailover 和 setMultiSubnetFailover 以编程方式访问连接属性。

注意

从 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。

realm

  • 类型:String
  • 默认:null

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

replication

  • 类型: 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_ONLY 和 CONCUR_READ_ONLY 游标。 通常,仅当应用程序生成无法完全容纳在客户端内存中的大型结果集时,才需要此属性。 如果将此属性 cursor设置为,驱动程序在客户端内存中只保留有限的结果集行数。

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

sendStringParametersAsUnicode

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

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

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

sendStringParametersAsUnicode 属性的默认值是 true。

注意

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

为了在使用 CHAR、VARCHAR 和 LONGVARCHAR JDBC 数据类型时获得最佳性能,应用程序应将 sendStringParametersAsUnicode 属性设置为 false,并使用 setString、setCharacterStream 和 setClob 这些非国家字符方法来操作 SQLServerPreparedStatement 类和 SQLServerCallableStatement 类。

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

应用程序应针对 setNString、setNCharacterStream 和 setNClob JDBC 数据类型,使用 SQLServerPreparedStatement 类 和 SQLServerCallableStatement 类 的 NCHAR、NVARCHAR 和 LONGNVARCHAR 国家字符方法。

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

sendTemporalDataTypesAsStringForBulkCopy

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

(版本 8.4+)当您将此连接属性设置为 false 时,驱动程序会将 DATE、DATETIME、DATETIME2、DATETIMEOFFSET、SMALLDATETIME 和 TIME 数据类型以各自的类型发送,而不是将它们作为 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 值。

serverCertificate, server

  • 类型: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,驱动程序将在预编译语句关闭时立即执行“unprepare”操作。 如果将属性 > 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+)指定自定义套接字工厂要使用的类名称,而不是默认套接字工厂。

(版本 13.6+)值必须是有效的 Java 二进制类名。 驱动程序在尝试加载该类之前会拒绝无效值。

socketTimeout

  • 类型:int
  • 默认:0

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

statementPoolingCacheSize

  • 类型:int
  • 默认:0

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

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

此属性仅应与 disableStatementPooling 连接属性配合使用,且应将该属性设置为 false。 disableStatementPooling设置为true或statementPoolingCacheSize设置为 0 会禁用已准备的语句句柄缓存。

sslProtocol

  • 类型:String
  • 默认:TLS

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

可能的值为: TLS、 TLSv1、 TLSv1.1和 TLSv1.2。

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

transparentNetworkIPResolution

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

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

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

注意

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

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

trustManagerClass

  • 类型:String
  • 默认:null

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

(版本 13.6+)值必须是有效的 Java 二进制类名。 驱动程序在尝试加载该类之前会拒绝无效值。

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的完整性。

如果未指定 trustStore 和 trustStorePassword 属性,驱动程序将使用 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, user

  • 类型: 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 以启用对 FLOAT32 和 FLOAT16 向量的本机向量类型支持。 FLOAT16向量在网络传输中使用 IEEE-754 半精度序列化格式,并在 Java 中表示为 Float[] 数组。

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

workstationID

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

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

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

xopenStates

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

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

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