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

时间:2015-09-14 19:39:50

标签: java sql-server jdbc

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

我见过DB2,您可以运行此命令并获取版本:

code={code}&protocol=https://&store={store}&timestamp={timestamp}

Microsoft SQL Server的等价物(如果有)是什么?

4 个答案:

答案 0 :(得分:3)

似乎没有专用的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 :(得分:1)

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

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

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

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

答案 2 :(得分: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
从JDK9开始,可以使用

jshell 命令。或者,您也可以在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

答案 3 :(得分:0)

如果您有权访问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 = "";
}