创建连接 URL
连接 URL 的一般形式为:
jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
其中:
jdbc:sqlserver://(必需)- 称为子协议,且为常数。
serverName(可选)- 要连接到的服务器的地址。 此地址可以是 DNS 或 IP 地址,也可以是本地计算机
localhost
或127.0.0.1
。 如果未在连接 URL 中指定服务器名称,则必须在属性集中指定。instanceName(可选)-
serverName
上要连接到的实例。 如果未指定,则会连接到默认实例。portNumber(可选)-
serverName
上要连接到的端口。 默认为1433
。 如果使用默认端口,则无需在 URL 中指定端口及其前面的:
。注意
要获得最佳连接性能,应在连接到命名实例时设置
portNumber
。 这将避免为了确定端口号而与服务器进行往返通讯。 如果同时使用portNumber
和instanceName
,则portNumber
将优先且instanceName
将被忽略。property(可选)- 一个或多个选项连接属性。 有关详细信息,请参阅设置连接属性。 可指定该列表中的任何属性。 属性只能用分号 (
;
) 分隔,且不允许重复。
注意
出于安全考虑,应避免根据用户输入的内容创建连接 URL。 只应在 URL 中指定服务器名称和驱动程序。 对于用户名和密码值,请使用连接属性集。 有关 JDBC 应用程序安全性的详细信息,请参阅保护 JDBC 驱动程序应用程序。
连接属性
有关可在连接字符串中设置的属性的详细列表,请参阅设置连接属性。
连接示例
使用用户名和密码连接到本地计算机上的默认数据库:
jdbc:sqlserver://localhost;encrypt=true;user=MyUserName;password=<password>;
注意
尽管前面的示例在连接字符串中使用了用户名和密码,但你应使用集成安全性,因为这样做更安全。 有关详细信息,请参阅本主题后面部分的通过集成身份验证进行连接一节。
以下连接字符串演示了如何使用集成身份验证和 Kerberos,从一个在 Microsoft JDBC Driver for SQL Server 支持的任何操作系统上运行的应用程序连接到 SQL Server 数据库:
jdbc:sqlserver://;servername=server_name;encrypt=true;integratedSecurity=true;authenticationScheme=JavaKerberos
使用集成身份验证连接到本地计算机上的默认数据库:
jdbc:sqlserver://localhost;encrypt=true;integratedSecurity=true;
连接到远程服务器上的指定数据库:
jdbc:sqlserver://localhost;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;
连接到远程服务器上的默认端口:
jdbc:sqlserver://localhost:1433;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;
通过指定自定义应用程序名称进行连接:
jdbc:sqlserver://localhost;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;applicationName=MyApp;
命名的多个 SQL Server 实例
SQL Server 允许在每台服务器上安装多个数据库实例。 每个实例都由一个特定名称标识。 要连接到 SQL Server 的命名实例,你可以指定命名实例的端口号(首选)。 还可以将实例名称指定为 JDBC URL 属性或“数据源”属性。 如果未指定实例名属性或端口号属性,则会创建与默认实例的连接。 请看以下示例:
若要指定端口号,请使用以下格式:
jdbc:sqlserver://localhost:1433;encrypt=true;integratedSecurity=true;<more properties as required>;
若要使用 JDBC URL 属性,请使用以下格式:
jdbc:sqlserver://localhost;encrypt=true;instanceName=instance1;integratedSecurity=true;<more properties as required>;
转义连接 URL 中的值
如果值包含特殊字符(如空格、分号和引号),则可能得对连接 URL 值的某些部分进行转义。 JDBC 驱动程序支持通过将这些字符包含在大括号中对它们进行转义。 例如,{;}
将转义分号。
在 8.4 版本之前,转义的值可以包含特殊字符(特别是 =
、;
、[]
和空格),但不能包含大括号。 应将必须进行转义且包含大括号的值添加到属性集中。
在 8.4 及更高版本中,转义的值可以包含大括号等特殊字符。 但是,必须对右大括号进行转义。 例如,如果密码为 pass";{}word
则连接字符串需要对密码进行转义,如下所示:
jdbc:sqlserver://localhost;encrypt=true;username=MyUsername;password={pass";{}}word};
注意
大括号内的空白为原义字符,不能删除。
在 Windows 上通过集成身份验证进行连接
JDBC 驱动程序支持通过使用 integratedSecurity
连接字符串属性在 Windows 操作系统上使用“类型 2”集成身份验证。 要使用此集成的身份验证,请将 mssql-jdbc_auth-<version>-<arch>.dll
文件复制到计算机中 Windows 系统路径下的 JDBC 驱动程序安装目录中。
mssql-jdbc_auth-<version>-<arch>.dll
文件安装在以下位置:
<installation directory>\sqljdbc_<version>\<language>\auth\
有关 Microsoft JDBC Driver for SQL Server 支持的任何操作系统,请参阅使用 Kerberos 集成的身份验证连接到 SQL Server 以了解 Microsoft JDBC Driver 4.0 for SQL Server 中新增的一个功能,该功能允许应用程序使用集成的身份验证和类型 4 Kerberos 来连接数据库。
注意
如果运行的是 32 位 Java 虚拟机 (JVM),则使用 x86 文件夹中的 mssql-jdbc_auth-<version>-<arch>.dll
文件,即使操作系统是 x64 版本也不例外。 如果在 x64 处理器上运行 64 位 JVM,则使用 x64 文件夹中的 mssql-jdbc_auth-<version>-<arch>.dll
文件。
也可以设置 java.library.path 系统属性来指定 mssql-jdbc_auth-<version>-<arch>.dll
的目录。 例如,如果 JDBC 驱动程序安装在默认目录中,你可以在 Java 应用程序启动时使用以下虚拟机 (VM) 参数来指定 DLL 的位置:
-Djava.library.path=C:\Microsoft JDBC Driver 6.4 for SQL Server\sqljdbc_<version>\enu\auth\x86
通过 IPv6 地址进行连接
JDBC 驱动程序支持结合使用 IPv6 地址以及连接属性集合和 serverName
连接字符串属性。 连接字符串不支持在 IPv6 地址中使用初始 serverName
值,如 jdbc:sqlserver://serverName
。 使用 serverName
的名称而不是原始 IPv6 地址将适用于连接中的所有情况。 以下实例提供了详细信息。
使用 serverName 属性:
jdbc:sqlserver://;serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1;encrypt=true;integratedSecurity=true;
使用属性集合:
Properties pro = new Properties();
pro.setProperty("serverName", "serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1");
Connection con = DriverManager.getConnection("jdbc:sqlserver://;encrypt=true;integratedSecurity=true;", pro);