连接 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(可选)是一个或多个选项连接属性。有关详细信息,请参阅JDBC 连接 SQL Server 数据库 - 设置连接属性 。可指定该列表中的任何属性。属性只能用分号(“;”)分隔,且不允许重复。
警告: |
出于安全考虑,应避免根据用户输入的内容创建连接 URL。只应在 URL 中指定服务器名称和驱动程序。对于用户名和密码值,请使用连接属性集。有关 JDBC 应用程序中安全性的详细信息,请参阅保护 JDBC Driver 应用程序 。 |
连接实例使用用户名和密码连接到本地计算机上的默认数据库:
jdbc:sqlserver://localhost;user=MyUserName;password=*****;
注意: |
尽管以上实例在连接字符串中使用了用户名和密码,但如果在 Windows 操作系统中运行应用程序,则应使用集成安全性,因为这样会更加安全。有关详细信息,请参阅本主题后面部分的JDBC 连接 SQL Server 数据库 - 创建连接 URL一节。 |
使用集成身份验证连接到本地计算机上的默认数据库:
jdbc:sqlserver://localhost;integratedSecurity=true;
连接到远程服务器上的指定数据库:
jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;
连接到远程服务器上的默认端口:
jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;integratedSecurity=true;
通过指定自定义应用程序名称进行连接:
jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;applicationName=MyApp;
指定的多个 SQL Server 实例SQL Server 2000 和 SQL Server 2005 允许在每台服务器上安装多个数据库实例。每个实例都由一个专用名称所标识。若要连接到指定的 SQL Server 实例,可以使用指定实例的端口号(首选),也可将实例名指定为 JDBC URL 属性或 datasource 属性。如果未指定实例名属性或端口号属性,则会创建与默认实例的连接。如以下实例所示:
若要使用端口号,请执行下列操作:
jdbc:sqlserver://localhost:1433;integratedSecurity=true;<more properties as required>;
若要使用 JDBC URL 属性,请执行下列操作:
jdbc:sqlserver://localhost;instanceName=instance1;integratedSecurity=true;<more properties as required>;
转义连接 URL 中的值由于包含特殊字符(如空格、分号和引号),所以必须转义连接 URL 值的某些部分。如果这些字符包含在大括号中,则 JDBC 驱动程序将支持对其进行转义。例如,{;} 将转义分号。
转义的值可以包含特殊字符(特别是“=”、“;”、“[]”和空格),但不能包含大括号。应将必须进行转义且包含大括号的值添加到属性集中。
注意: |
大括号内的空白为原义字符,不能删除。 |
通过集成身份验证进行连接JDBC 驱动程序支持通过 integratedSecurity 连接字符串属性在 Windows 操作系统上使用“类型 2”集成身份验证。若要使用集成身份验证,请将 sqljdbc_auth.dll 文件复制计算机中 Windows 系统路径下的 JDBC 驱动程序安装目录中。
sqljdbc_auth.dll 文件的安装位置如下:
<安装目录>/sqljdbc_<版本>/<语言>/auth/
注意: |
如果您运行 32 位的 Java 虚拟机 (JVM),则使用 x86 文件夹中的 sqljdbc_auth.dll 文件,即使操作系统是 x64 版本也不例外。如果您在 x64 处理器上运行 64 位 JVM,则使用 x64 文件夹中的 sqljdbc_auth.dll 文件。如果您在 IA-64 处理器上运行 64 位 JVM,则使用 IA64 文件夹中的 sqljdbc_auth.dll 文件。 |
也可以通过设置 java.libary.path 系统属性来指定 sqljdbc_auth.dll 的目录,例如,如果 JDBC 驱动程序安装在默认目录中,您可以在 Java 应用程序启动时使用以下虚拟机 (VM) 参数来指定 DLL 的位置:
-Djava.library.path=C:/Microsoft SQL Server 2005 JDBC Driver/sqljdbc_<version>/enu/auth/x86
通过 IPv6 地址进行连接JDBC 驱动程序支持使用具有连接属性集和 serverName 连接字符串属性的 IPv6 地址。连接字符串不支持在 IPv6 地址中使用初始 serverName 值,如 jdbc:sqlserver://serverName。使用 serverName 的名称而不是原始 IPv6 地址将适用于连接中的所有情况。以下实例提供了详细信息。
使用 serverName 属性
jdbc:sqlserver://;serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9//instance1;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://;integratedSecurity=true;", pro);