创建连接 URL

下载 JDBC 驱动程序

连接 URL 的一般形式为:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

其中:

  • jdbc:sqlserver://(必需)- 称为子协议,且为常数。

  • serverName(可选)- 要连接到的服务器的地址。 此地址可以是 DNS 或 IP 地址,也可以是本地计算机 localhost127.0.0.1。 如果未在连接 URL 中指定服务器名称,则必须在属性集中指定。

  • instanceName(可选)- serverName 上要连接到的实例。 如果未指定,则会连接到默认实例。

  • portNumber(可选)- serverName 上要连接到的端口。 默认为 1433。 如果使用默认端口,则无需在 URL 中指定端口及其前面的 :

    注意

    要获得最佳连接性能,应在连接到命名实例时设置 portNumber。 这将避免为了确定端口号而与服务器进行往返通讯。 如果同时使用 portNumberinstanceName,则 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);