JDBC 链接 SQL SERVER 详解

来源:互联网 发布:linux查看编码方式 编辑:程序博客网 时间:2024/05/16 17:19

  首先从www.microsoft.com下载JDBC Driver。

        为了支持向后兼容以及可能的升级方案,JDBC Driver 2.0 在每个安装包中都包括 2 个 JAR 类库:sqljdbc.jarsqljdbc4.jar

JAR 说明

sqljdbc.jar

sqljdbc.jar 类库提供对 JDBC 3.0 的支持。

sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时,在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。

注意: JDBC Driver 2.0 不支持 JRE 1.4。使用 JDBC Driver 2.0 时必须将 JRE 1.4 升级至 JRE 5.0 或更高版本。在某些情况下,您可能需要重新编译应用程序,因为它可能与 JDK 5.0 或更高版本不兼容。有关详细信息,请参阅 Sun Microsystems 网站上的文档。

sqljdbc4.jar

sqljdbc4.jar 类库提供对 JDBC 4.0 的支持。它不仅包括 sqljdbc.jar 的所有功能,还包括新增的 JDBC 4.0 方法。

sqljdbc4.jar 类库要求使用 6.0 或更高版本的 Java 运行时环境 (JRE)。在 JRE 1.4 或 5.0 上使用 sqljdbc4.jar 会引发异常。

注意: 如果应用程序必须在 JRE 6.0 上运行,即使该应用程序不使用 JDBC 4.0 功能,也应使用 sqljdbc4.jar

SQL Server 要求

       JDBC Driver 专为使用 SQL Server 2005 引入的功能而设计,但它也可以向后兼容 SQL Server 2000(包括 64 位版本)。

    重要提示: Microsoft SQL Server JDBC Driver 2.0 可以连接到 SQL Server 2008,但不完全支持 SQL Server 2008 中新引入的数据类型或其他功能。

在 Windows 系统中部署 JDBC 驱动程序

       在 Windows 操作系统中部署 JDBC 驱动程序时,必须使用安装包的可执行 zip 文件版本,其名称通常为 sqljdbc_<version>_enu.exe

若要无提示运行可执行 zip 文件,必须在命令行或批处理文件中使用 /auto 命令行选项,如下所示:

sqljdbc_<version>_enu.exe /auto

     注意: 使用 /auto 选项时,执行的并不是真正的无提示安装,因为 WinZip 对话框仍会出现在用户屏幕中。然而,您无需与其进行交互,解压缩操作完成后,它会立即关闭。

在 UNIX 系统中部署驱动程序

       在 UNIX 操作系统中部署 JDBC 驱动程序时,必须使用安装包的 gzip 文件版本,其名称通常为 sqljdbc_<version>_enu.tar.gz

在安装 JDBC 驱动程序前,请确保用户的系统中安装了 gzip 和 tar 实用程序,并已将包含这两个实用程序可执行文件的文件夹添加到了 PATH 环境变量中。

      若要无提示运行 gzip 文件,请在命令行或批处理文件中使用 xfz 命令行选项,如下所示:

tar xfz sqljdbc_<version>_enu.tar.gz

     注意: 使用 xfz 选项时,执行的并不是真正的无提示安装,因为某些警告可能会发送到标准输出。 

选择正确的 JAR 文件

        Microsoft SQL Server JDBC Driver 2.0 提供两个类库文件:sqljdbc.jarsqljdbc4.jar,具体使用哪个文件取决于首选的 Java 运行时环境 (JRE) 设置。

设置 Classpath

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

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

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

<安装目录>/sqljdbc_<版本>/<语言>/sqljdbc4.jar

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

CLASSPATH =.;C:/Program Files/Microsoft SQL Server JDBC

         Driver/sqljdbc_2.0/enu/sqljdbc.jar

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

CLASSPATH =.:/home/usr1/mssqlserverjdbc/Driver/sqljdbc_2.0

        /enu/sqljdbc.jar

必须确保 CLASSPATH 语句仅包含一个 Microsoft SQL Server JDBC driver,例如 sqljdbc.jar 或 sqljdbc4.jar。

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

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

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

在 IDE 中运行的应用程序

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

具体代码如下:

package test;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;


public class TestConnectionSqlserver {
    public static void main(String [] args){
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
               "databaseName=db_onlinetest;user=sa;password=admin;";
            Connection con = DriverManager.getConnection(connectionUrl);
            String sql = "select name from tb_user";
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            
            while(rs.next()){
                System.out.println("name: "+rs.getString(1));
            }
            
            rs.close();
            st.close();
            con.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

     注意jre的版本问题,最好不要使用eclipse自带的jre,用自己安装的。

报错问题

报错一:

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdlbc.SQLServerDriver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at test.TestConnectionSqlserver.main(TestConnectionSqlserver.java:11)

两种可能:

            1.没有添加jar包。或者没有配置sqljdbc4.jar或sqljdbc.jar的
               classpath。
            2.Class.forName("com.microsoft."+
                        "sqlserver.jdbc.SQLServerDriver");
                有错,检查有没有拼写错误。

报错二
    Exception in thread "main" java.lang.UnsupportedClassVersionError:
            Bad version number in .class file
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at test.TestConnectionSqlserver.main(TestConnectionSqlserver.java:11)
    出错原因:
        jre版本问题,更换6.0或以上版本,不要使用myeclipse自带的jre。