我有几台服务器使用Microsoft SQL Server JDBC驱动程序,所有文件都命名为sqljdbc4.jar
。 我需要知道每个版本的驱动程序是什么。时间戳和文件大小没有帮助,因为我需要提取驱动程序版本号。 我需要能够在命令行上运行此操作。
我已经看到针对DB2可以运行此命令并获取版本:
java -cp ./db2jcc.jar com.ibm.db2.jcc.DB2Jcc -version
如果有的话,Microsoft SQL Server 的等效产品是什么?
我有几台服务器使用Microsoft SQL Server JDBC驱动程序,所有文件都命名为sqljdbc4.jar
。 我需要知道每个版本的驱动程序是什么。时间戳和文件大小没有帮助,因为我需要提取驱动程序版本号。 我需要能够在命令行上运行此操作。
我已经看到针对DB2可以运行此命令并获取版本:
java -cp ./db2jcc.jar com.ibm.db2.jcc.DB2Jcc -version
如果有的话,Microsoft SQL Server 的等效产品是什么?
似乎没有专门的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, ...
IBM提供了特定的工具在其JAR中,以提供您所描述的行为。这不是JDBC驱动程序或JAR文件的一般功能。
Microsoft在MSDN上记录了可用于确定驱动程序版本的机制(链接)。他们提供了两种替代方案:
SQLServer
] DatabaseMetaData
对象(即通过Java程序)中提取信息;对于您的用途来说,最合适的方法似乎是getDriverVersion()
。或者readme.txt
文件中提取信息。除非readme.txt
被打包到JAR文件中(可能,但不太可能),否则前一种方法是仅使用JAR文件的唯一方法。编写一个Java程序和包装脚本来将此方法应用于任务应该不太困难,但它看起来远不像针对DB2驱动程序那样简单。
final class SQLJdbcVersion
{
static final int major = 4;
static final int minor = 0;
static final int MMDD = 2206;
static final int revision = 100;
}
因此,在反编译JAR时不应该有任何法律问题。JDBC驱动程序是开源的,源代码可以在GitHub上找到。
当前 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 = "";
}
$ 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