在命令行上确定SQL Server JDBC版本

5

我有几台服务器使用Microsoft SQL Server JDBC驱动程序,所有文件都命名为sqljdbc4.jar。 我需要知道每个版本的驱动程序是什么。时间戳和文件大小没有帮助,因为我需要提取驱动程序版本号。 我需要能够在命令行上运行此操作。

我已经看到针对DB2可以运行此命令并获取版本:

java -cp ./db2jcc.jar com.ibm.db2.jcc.DB2Jcc -version

如果有的话,Microsoft SQL Server 的等效产品是什么?


这个链接可能会有帮助:https://dev59.com/m2025IYBdhLWcg3wvIcn - RadijatoR
4个回答

5

似乎没有专门的CLI来打印驱动程序版本,但您可以询问MS 4.x驱动程序其版本:

import java.sql.Driver;
import com.microsoft.sqlserver.jdbc.SQLServerDriver;
...
Driver driver = new SQLServerDriver();
driver.getMajorVersion();  // -> 4
driver.getMinorVersion();  // -> 0, 1, 2, ...

你可以构建一个简单的命令行包装器来打印出这些信息。

1

IBM提供了特定的工具在其JAR中,以提供您所描述的行为。这不是JDBC驱动程序或JAR文件的一般功能。

Microsoft在MSDN上记录了可用于确定驱动程序版本的机制(链接)。他们提供了两种替代方案:

  • 通过驱动程序获取[SQLServer] DatabaseMetaData对象(即通过Java程序)中提取信息;对于您的用途来说,最合适的方法似乎是getDriverVersion()。或者
  • 从分发中提供的readme.txt文件中提取信息。

除非readme.txt被打包到JAR文件中(可能,但不太可能),否则前一种方法是仅使用JAR文件的唯一方法。编写一个Java程序和包装脚本来将此方法应用于任务应该不太困难,但它看起来远不像针对DB2驱动程序那样简单。


1
如果您有Java反编译器的访问权限,可以使用反编译器打开SQLJDBC JAR文件并检查以下反编译类:com\microsoft\sqlserver\jdbc\SQLJdbcVersion.class。它会显示如下版本信息:
final class SQLJdbcVersion
{
   static final int major = 4;
   static final int minor = 0;
   static final int MMDD = 2206;
   static final int revision = 100;
}

我不知道该类是否在所有版本的SQLJDBC JAR中都可用,但我已经在3.0、4.0和4.2 JARs中找到了它。GitHub(下面的链接)也显示它存在于6到8版本中。所有版本似乎都包括“major”和“minor”变量;其他包含的变量因版本而异。
也许您可以创建一个脚本来调用反编译器,然后从反编译文件中提取主要值和次要值,并删除反编译文件,以从命令行获取数据。
根据此页面,SQL Server JDBC驱动程序是开源的: https://learn.microsoft.com/en-us/sql/connect/jdbc/frequently-asked-questions-faq-for-jdbc-driver?view=sql-server-ver15

JDBC驱动程序是开源的,源代码可以在GitHub上找到。

因此,在反编译JAR时不应该有任何法律问题。

当前 GitHub 的 "dev" 分支代码版本显示了以下数值:

final class SQLJdbcVersion {
   static final int major = 8;
   static final int minor = 4;
   static final int patch = 0;
   static final int build = 0;
   /*
    * Used to load mssql-jdbc_auth DLL.
    * 1. Set to "-preview" for preview release.
    * 2. Set to "" (empty String) for official release.
    */
   static final String releaseExt = "";
}

0
我建议使用这个一行代码来获取内部 MSSQL 驱动程序的版本:
$ echo "System.out.println(new com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData(null).getDriverVersion())" | /usr/java/jdk-11.0.2/bin/jshell -q --class-path mssql-jdbc-7.0.0.jre10.jar

jshell> System.out.println(new com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData(null).getDriverVersion())
7.0.0.0

jshell 命令从 JDK9 开始可用。或者您也可以在 JDK8 上使用 jrunscript

$ jrunscript -cp mssql-jdbc-7.0.0.jre10.jar -e "java.lang.System.out.println(new com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData(null).getDriverVersion())"

Warning: Nashorn engine is planned to be removed from a future JDK release
7.0.0.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接