前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java:版本号比较(compare version string)

java:版本号比较(compare version string)

作者头像
10km
发布2022-04-13 12:38:53
2.7K0
发布2022-04-13 12:38:53
举报
文章被收录于专栏:10km的专栏10km的专栏

java中如何实现两个版本号(如5.7 vs 5.7.36)怎么比较大小?

百度上用java 比较版本号关键字搜索了一下都找到的文章都要自己写代码做字符串分割,分段比较。。。好麻烦。 bing/google上搜索英文关键字java compare version,第二个就是这篇在stackoverflow上的文章 https://stackoverflow.com/questions/198431/how-do-you-compare-two-version-strings-in-java 给出了最简单的现成的方案:使用org.apache.maven:maven-artifact:3.2.5库中的 org.apache.maven.artifact.versioning.DefaultArtifactVersion,比较版本号就变得很简单:

代码语言:javascript
复制
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;

DefaultArtifactVersion minVersion = new DefaultArtifactVersion("1.0.1");
DefaultArtifactVersion maxVersion = new DefaultArtifactVersion("1.10");

DefaultArtifactVersion version = new DefaultArtifactVersion("1.11");

if (version.compareTo(minVersion) < 0 || version.compareTo(maxVersion) > 0) {
    System.out.println("Sorry, your version is unsupported");
}

下面是我基于org.apache.maven.artifact.versioning.DefaultArtifactVersion实现的用于JDBC检查数据库类型和版本号的方法:

代码语言:javascript
复制
import static com.google.common.base.Preconditions.checkState;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
/**
 * JDBC工具类
 * @author guyadong
 *
 */
public class JDBCUtility {
	/**
	 * 检查数据库类型及版本是否满足要求,不满足则抛出异常
	 * @param metaData
	 * @param requiredProductName 要求的数据库名,such as 'MySQL'
	 * @param requiredMinVersion     要求的数据最低版本号,such as '5.7.36'
	 * @param requiredMaxVersion    要求的数据最高版本号,为{@code null}或空忽略
	 * @throws SQLException  从DatabaseMetaData读取数据异常
	 */
	public static void checkDatatbaseVersion(DatabaseMetaData metaData,String requiredProductName,String requiredMinVersion,String requiredMaxVersion) throws SQLException{
		String productName = checkNotNull(metaData,"metaData is null").getDatabaseProductName();
		DefaultArtifactVersion minVersion = new DefaultArtifactVersion(checkNotNull(requiredMinVersion,"requiredMinVersion is null"));
		DefaultArtifactVersion version = new DefaultArtifactVersion(metaData.getDatabaseProductVersion());
		checkState(productName.equals(requiredProductName),"%s required",requiredMinVersion);
		checkState(version.compareTo(minVersion) >= 0,"Sorry, %s min version %s is required",requiredProductName,minVersion);
		if(!Strings.isNullOrEmpty(requiredMaxVersion)){
			DefaultArtifactVersion maxVersion = new DefaultArtifactVersion(requiredMaxVersion);
			checkState(version.compareTo(maxVersion) <= 0,"Sorry, %s max version %s is required",requiredProductName,maxVersion);
		}
	}
}

调用示例:

代码语言:javascript
复制
import java.sql.Connection;
// 创建数据库连接
Connection con=........;
JDBCUtility.checkDatatbaseVersion(con.getMetaData(),"MySQL","5.7",null);

参考资料

《How do you compare two version Strings in Java?》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • java中如何实现两个版本号(如5.7 vs 5.7.36)怎么比较大小?
    • 参考资料
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档