前言

多年不用Microsoft SQL Server,简单回顾一下并记录一下在java中连接SQL Server的过程和注意事项。首先,从下载Driver开始。

Microsoft JDBC Drivers

官方的下载地址为:适用于 SQL Server 的 Microsoft JDBC Drivers 4.2、4.1 和 4.0
根据官方介绍,最新的Driver已经出到了4.2,它支持JDK1.8并兼容JDBC 4.2,下面是官方的介绍:

所有 SQL Server 用户都可以下载适用于 SQL Server 的 Microsoft JDBC Drivers 4.2、4.1 和 4.0,无需额外付费。同时,可从任何 Java 应用程序、应用程序服务器或支持 Java 的小程序访问 Microsoft SQL Server 2014、SQL Server 2012、SQL Server 2008 R2、SQL Server 2008、SQL Server 2005 和 SQL Azure。对于适用于 SQL Server 的 Microsoft JDBC Driver 4.2(预览版)和 4.1,将从 SQL Server 2008 开始支持。

需要注意的是4.2和4.1从SQL Server 2008才开始支持,这也就是意味着如果你使用的是SQL Server 2005,那么你只能下载Driver 4.0。

官方同时也列举了各版本的Driver和各版本的JDK的支持:
- JDBC Driver 4.2支持JDK 5.0、6.0、7.0和8.0
- JDBC Driver 4.1支持JDK 5.0、6.0、7.0
- JDBC Driver 4.0支持JDK 5.0、6.0

关于SQL Server的版本和Driver的版本的支持方面上面已经提过,就是SQL Server 2005只能使用Driver 4.0版本,而SQL Server 2008到2014均可使用4.0、4.1和4.2任意版本的Driver。需要注意的问题就这么多,接下来选择版本下载即可。

首先选择语言,点击下载按钮:

sql server数据库驱动包在什么文件夹里 sql的驱动包_Server

选择下载全部版本的文件,点击Next开始下载:

sql server数据库驱动包在什么文件夹里 sql的驱动包_maven_02

下载完成后我们可以看到我们的文件列表,包括windows版本和unix版本的3组文件(4.0、4.1和4.2):

sql server数据库驱动包在什么文件夹里 sql的驱动包_SQL_03

最后通过安装即可获取到我们的jar包,接下来看一下安装过程。

Install JDBC Driver

安装其实就是一个解压的过程而已,我们需要的仅仅是驱动jar包,官方也给出了windows系统和unix系统中详细的安装说明:

用于 Microsoft Windows 版本的 JDBC Driver 安装说明

  1. 下载 sqljdbc__.exe 至一个临时目录。
  2. 运行 sqljdbc__.exe。
  3. 出现提示时,输入安装目录。建议您在 %ProgramFiles% 中解压缩该 zip 文件,并使用下面默认目录:”Microsoft JDBC Driver 4.x for SQL Server”。

用于 UNIX 版本的 JDBC Driver 安装说明

  1. 下载 sqljdbc__.tar.gz 至一个临时目录。
  2. 要解压缩压缩的 tar 文件,请先导航至您想要解压缩该驱动程序的目录,并键入 gzip -d sqljdbc__.tar.gz。
  3. 要解压缩 tar 文件,请先将其移至您想要安装该驱动程序的目录,并键入 tar –xf sqljdbc__.tar。

下面以安装4.0版本的为例,首先运行sqljdbc_4.0.2206.100_chs.exe,点击运行,

sql server数据库驱动包在什么文件夹里 sql的驱动包_sql server_04

点击Unzip解压文件,

sql server数据库驱动包在什么文件夹里 sql的驱动包_jdbc_05

紧接着会提示解压成功,

sql server数据库驱动包在什么文件夹里 sql的驱动包_SQL_06

然后在当前目录下我们就可以看到文件目录了,

sql server数据库驱动包在什么文件夹里 sql的驱动包_Server_07

最后进入目录很快就能找到我们的驱动jar文件了,

sql server数据库驱动包在什么文件夹里 sql的驱动包_Server_08

Java Test

最后建一个简单的Java项目,写一下jdbc的测试代码即可,还有关于一些常见的问题,例如:SQL Server的身份验证方式要设置为SQL Server身份验证而不能使用Windows身份验证,否则JDBC是无法登录的,下面是一段简单的测试类的代码:

package com.wl.test;

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

public class Test {

    private static final String SQLSERVER_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    // private static final String POSTGRESQL_DRIVER="org.postgresql.Driver";
    private static final String SQLSERVER_URL = "jdbc:sqlserver://192.168.0.77\\ZKZS;databaseName=xian";

    // private static final String POSTGRESQL_URL=
    // "jdbc:postgresql://localhost:5432/testdb";

    public static void main(String[] args) {
        try {
            Class.forName(SQLSERVER_DRIVER).newInstance();
            String url = SQLSERVER_URL;
            Connection con = DriverManager.getConnection(url, "sa", "sys");
            Statement st = con.createStatement();
            String sql = " select * from zkzs.table_1";
            ResultSet rs = st.executeQuery(sql);
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnCount = rsmd.getColumnCount();
            while (rs.next()) {
                for (int i = 1; i <= columnCount; i++) {
                    System.out.print(rs.getString(i) + "\t");
                }
                System.out.println();
            }
            rs.close();
            st.close();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

在代码中需要注意的是URL,我这里用了数据库实例名代替了端口号,如果要写实例名格式是”IP地址+\实例名;“,如果是端口号的话写法不变,依然是”IP地址+冒号+端口号;“,还有一般开发用sa用户和默认的dbo模式即可,运行main方法可成功在控制台看到查询结果。

SQL Server with Maven

我们发现在Maven仓库中搜不到SQL Server,搜出来的只是TranQL的相关依赖,

sql server数据库驱动包在什么文件夹里 sql的驱动包_Server_09

没错,在Maven的不支持的部分库中,就包括Microsoft SQL Server JDBC,那么我们只能手动来安装它到我们的Maven私服或者本地仓库了。拷贝我们刚才下载的最新jar包(4.1)到一个目录,运行如下的mvn命令:

sql server数据库驱动包在什么文件夹里 sql的驱动包_maven_10

可以看到构建成功,接下来我们就可以在我们的Maven项目中使用我们指定的SQL Server依赖了,坐标如下:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc41</artifactId>
    <version>4.1</version>
</dependency>

最后在我们项目的pom.xml中引入并确保没有任何报错即可,如下所示:

sql server数据库驱动包在什么文件夹里 sql的驱动包_jdbc_11

Tips About Navicat

最后还想啰嗦一点关于Navicat远程连接SQL Server的相关注意事项,同样的有两种方式来指定URL:实例名 or 端口号,实例名是通过一个反斜杠来分隔,而端口号是通过一个逗号来分隔,如下图所示:

sql server数据库驱动包在什么文件夹里 sql的驱动包_SQL_12


sql server数据库驱动包在什么文件夹里 sql的驱动包_maven_13

总结

记录一下jdbc和SQL Server遇到的些许小问题,时隔多年再次接触微软的东西,颇有感概,仅供参考,The End。