【问题标题】:Determine the SQL Server JDBC version on command line在命令行上确定 SQL Server JDBC 版本
【发布时间】:2015-09-14 19:39:49
【问题描述】:

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

我见过 DB2 你可以运行这个命令并获取版本:

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

Microsoft SQL Server 的等效项(如果有)是什么?

【问题讨论】:

标签: java sql-server jdbc


【解决方案1】:

似乎没有专门的 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, ...

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

【讨论】:

    【解决方案2】:

    IBM 在其 JAR 中提供特定工具来提供您描述的行为。它不是 JDBC 驱动程序或 JAR 文件的一般特性。

    Microsoft 记录了用于确定驱动程序版本on MSDN 的可用机制。他们提供了两种选择:

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

    除非readme.txt 被打包在JAR 中(可能,但不太可能),前一种方法是唯一可以单独使用JAR 文件的方法。编写一个 Java 程序和一个包装脚本来将这种方法应用到任务中应该不会太难,但它看起来不像 DB2 驱动程序那么简单。

    【讨论】:

      【解决方案3】:

      如果您可以访问 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 JAR 中找到了它。 GitHub(下面的链接)也显示它存在于版本 6 到 8 中。所有版本似乎都包含“主要”和“次要”变量;包含的其他变量因版本而异。

      要从命令行获取该数据,也许您可​​以创建一个脚本来调用反编译器,然后从反编译文件中提取主要和次要值,并删除反编译文件。

      SQL Server JDBC 驱动程序是开源的,根据此页面: https://docs.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 = "";
      }
      

      【讨论】:

        【解决方案4】:

        我建议使用这一行来获取内部 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-17
          • 2023-03-20
          相关资源
          最近更新 更多