【问题标题】:Issue connecting to SQL Server 2012 with JDBC使用 JDBC 连接到 SQL Server 2012 的问题
【发布时间】:2017-08-31 17:48:36
【问题描述】:

我正在尝试使用 JDBC 连接到 SQL Server 2012 数据库。我的连接代码是:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");      
Connection conn = DriverManager.getConnection("jdbc:sqlserver://<server_name>:1433", "username", "password");

但是getConnection() 抛出以下异常:

The server version is not supported. The target server must be SQL Server 2000 or later.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)

我已经从 Microsoft 下载了最新的 JDBC jar(实际上我已经尝试了大约六种不同版本的 sqljdbc#.jar 文件)。

还有什么可能导致这个问题?

【问题讨论】:

  • Drivers for relational access 你确定你得到的是最新的 6.2 吗?
  • 是的,我试过 6.0 和 6.2。
  • 我可以使用 JTDS 驱动程序进行连接。
  • 您的构建路径 (CLASSPATH) 上是否有多个用于 mssql-jdbc 的 .jar 文件?我刚刚搜索了 6.x 版本的 mssql-jdbc 驱动程序的源代码,并且没有出现您引用的确切错误消息,这表明您实际上可能正在加载旧版本的驱动程序。
  • 是的!在我的类路径中的用户库中,有一个旧版本的 sqljdbc.jar。一旦我在构建顺序中上移了较新的版本,错误就消失了。 (请添加为答案,以便我为您提供解决方案。)

标签: java sql-server jdbc


【解决方案1】:

在尝试多个不同版本的驱动程序时(例如,出于故障排除目的),请注意不要在构建路径 (CLASSPATH) 上为驱动程序(不同版本)留下多个 .jar 文件,因为由此产生的行为可能会造成混淆。

此外,这样的代码可能会阐明问题:

try {
    java.sql.Driver d = (java.sql.Driver) Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
    System.out.printf("%d.%d", d.getMajorVersion(), d.getMinorVersion());
} catch (InstantiationException e1) {
    e1.printStackTrace();
} catch (IllegalAccessException e1) {
    e1.printStackTrace();
} catch (ClassNotFoundException e1) {
    e1.printStackTrace();
}

如果您一直看到相同的值(例如,"6.1"),那么您可能并没有真正加载不同版本的驱动程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多