JDBC 驱动程序并未包含在 Java SDK 中。因此,如果要使用该驱动程序,必须将 classpath 设置为包含 sqljdbc.jar 文件。如果 classpath 缺少 sqljdbc.jar 项,应用程序将引发“找不到类”的常见异常。

sqljdbc.jar 文件的安装位置如下:

<安装目录>\sqljdbc_<版本>\<语言>\sqljdbc.jar

下面是用于 Windows 应用程序的 CLASSPATH 语句实例:

CLASSPATH =.;C:\Program Files\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.1\enu\sqljdbc.jar

下面是用于 Unix/Linux 应用程序的 CLASSPATH 语句实例:

CLASSPATH =.:/home/usr1/mssqlserver2005jdbc/Driver/sqljdbc_1.1/enu/sqljdbc.jar



注意: 在 Window 系统中,如果目录名长于 8.3 或文件夹名中包含空格,将导致 classpath 出现问题。如果怀疑存在这类问题,应暂时将 sqljdbc.jar 文件移动到名称简单的目录中,例如 C:\Temp,更改 classpath,然后测试这样是否解决了问题。

 



直接在命令提示符运行的应用程序



在操作系统中配置 classpath。将 sqljdbc.jar 追加到系统的 classpath 中。或者,使用 java -classpath 选项,可以在运行此应用程序的 Java 命令行上指定 classpath。



在 IDE 中运行的应用程序



每个 IDE 供应商都提供了在 IDE 中设置 classpath 的不同方法。仅在操作系统中设置 classpath 将无法正常工作。必须将 sqljdbc.jar 添加到 IDE classpath。



Servlet 和 JSP



Servlet 和 JSP 在 servlet/JSP 引擎(如 Tomcat)中运行。必须根据 servlet/JSP 引擎文档来设置 classpath。仅在操作系统中设置 classpath 将无法正常工作。一些 servlet/JSP 引擎提供了设置屏幕,用于设置引擎的 classpath。在这种情况下,必须将正确的 JDBC Driver JAR 文件追加到现有的引擎 classpath,然后重新启动引擎。在其他情况下,通过在引擎安装期间将 sqljdbc.jar 文件复制到 lib 之类的特定目录,可以部署此驱动程序。也可以在引擎专用的配置文件中指定引擎驱动程序的 classpath。



Enterprise Java Beans



Enterprise Java Bean (EJB) 在 EJB 容器中运行。EJB 容器来自多家供应商。Java 小程序在浏览器中运行,但是从 Web 服务器上下载。将 sqljdbc.jar 复制到 Web 服务器根目录,并在小程序的 HTML 存档选项卡中指定 JAR 文件的名称,例如 <applet ... archive=sqljdbc.jar>



若要使用 DriverManager 类连接到数据库,必须首先按如下方式注册驱动程序:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

加载驱动程序后,可通过使用连接 URL 来建立连接:



String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
   "databaseName=AdventureWorks;user=MyUserName;password=*****;";
Connection con = DriverManager.getConnection(connectionUrl);




连接 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:sqlserver://localhost;user=MyUserName;password=*****;



注意: 尽管以上实例在连接字符串中使用了用户名和密码,但如果在 Windows 操作系统中运行应用程序,则应使用集成安全性,因为这样会更加安全。有关详细信息,请参阅本主题后面部分的通过集成身份验证进行连接一节。

 



使用集成身份验证连接到本地计算机上的默认数据库:

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 位处理器,请使用 x86 文件夹中的 sqljdbc_auth.dll 文件。如果使用 64 位处理器,请使用 x64 文件夹中的 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






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);