如何在 Java 中复制 PostgreSQL 的 uuid_generate_v3()?

2023-12-24

PostgreSQL:

 create extension if not exists "uuid-ossp";
 select uuid_generate_v3(uuid_nil(), 'this is a test');
           uuid_generate_v3           
--------------------------------------
 e1e27115-9f5b-366d-90e8-e07b1b36b99c
(1 row)

Java:

java> java.util.UUID.nameUUIDFromBytes("this is a test".getBytes());
java.util.UUID res9 = 54b0c58c-7ce9-32a8-b551-351102ee0938

如何在 Java 中生成与 PostgreSQL 相同的 UUID?


此处描述了生成版本 3 UUID 的算法https://www.rfc-editor.org/rfc/rfc4122#section-4.3 https://www.rfc-editor.org/rfc/rfc4122#section-4.3

但关键步骤是:

  • 分配一个 UUID 用作所有 UUID 的“名称空间 ID” 从该名称空间中的名称生成。
  • 选择 MD5 或 SHA-1 作为哈希算法
  • 将名称转换为规范的八位位组序列
  • 计算名称空间 ID 与名称连接的哈希值。
  • 将 的某些字节更改为预定义值(请参阅上面的链接)
  • 将生成的 UUID 转换为本地字节顺序。

postgres 函数签名是uuid_generate_v3(namespace uuid, name text)所以它需要命名空间 UUID 和name作为参数。
Java方法nameUUIDFromBytes(byte[] name)仅需要name并使用 MD5 对其进行哈希处理以创建 UUID。要获得与 PostgreSQL 相同的输出,您必须连接命名空间字节和name自己拼凑字节。

对于您使用过的命名空间uuid_nil()(全零)这是new UUID(0L, 0L)在爪哇。

把它们放在一起看起来像这样:

byte[] bytes = Arrays.concatenate(toByteArray(new UUID(0L, 0L)), "this is a test".getBytes(StandardCharsets.UTF_8));
System.out.println(UUID.nameUUIDFromBytes(bytes)); // prints out e1e27115-9f5b-366d-90e8-e07b1b36b99c

您可以将命名空间 UUID 转换为字节数组,如下所示:

private static byte[] toByteArray(UUID uuid) {
    ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
    bb.putLong(uuid.getMostSignificantBits());
    bb.putLong(uuid.getLeastSignificantBits());
    return bb.array();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 中复制 PostgreSQL 的 uuid_generate_v3()? 的相关文章

  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • 如何将 Java 赋值表达式转换为 Kotlin

    java中的一些东西就像 int a 1 b 2 c 1 if a b c System out print true 现在它应该转换为 kotlin 就像 var a Int 1 var b Int 2 var c Int 1 if a
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • 如何在 PostgreSQL 中返回不同时区的当前日期

    我正在开发一个使用东部时间并将数据库设置为太平洋时间的应用程序 这已经引起了一些问题 但我们被告知不可能有其他方式 所以我们只能解决它 不管怎样 我遇到的麻烦之一就是获取今天的约会 由于数据库位于太平洋 如果我使用以下命令询问今天的日期cu
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • 如何在 Java 中禁用 System.out 以提高速度

    我正在用 Java 编写一个模拟重力的程序 其中有一堆日志语句 到 System out 我的程序运行速度非常慢 我认为日志记录可能是部分原因 有什么方法可以禁用 System out 以便我的程序在打印时不会变慢 或者我是否必须手动检查并
  • HDFS:使用 Java / Scala API 移动多个文件

    我需要使用 Java Scala 程序移动 HDFS 中对应于给定正则表达式的多个文件 例如 我必须移动所有名称为 xml从文件夹a到文件夹b 使用 shell 命令我可以使用以下命令 bin hdfs dfs mv a xml b 我可以
  • Microsoft Graph 身份验证 - 委派权限

    我可以使用 Microsoft Graph 访问资源无需用户即可访问 https developer microsoft com en us graph docs concepts auth v2 service 但是 此方法不允许我访问需
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp

随机推荐

  • docker compose 覆盖 ports 属性而不是合并它

    我的 docker compose 配置如下所示 docker compose yml version 3 5 services nginx ports 8080 8080 docker compose prod yml version 3
  • Angular2-子组件中输入字段的模板驱动表单验证

    我正在努力添加template driven form validation在我的 angular2 应用程序中 我有一个叉子https plnkr co edit phhe74kAUmNZgNSmcsvm p preview https
  • PyInstaller不包含依赖文件

    我正在尝试在我的中创建一个 use PyInstallerproject https github com AJahJahRiddim md edit 这个项目使用weasyprint 但是当我运行pyinstaller时 它失败了 因为w
  • XHTML 1.0 过渡型与 XHTML 1.0 严格型?

    就 SEO 而言 从客户的角度来看 我应该使用 XHTML 1 0 Transitional 还是 XHTML 1 0 Strict 为什么有些人仍然使用 Transitional 如果我们使用过渡而不是严格 我们会失去一些东西吗 XHTM
  • 如何找到android TextView每行的字符数?

    所以我在android中有一个TextView 其宽度为屏幕的整个长度 填充为dip 5 如何计算屏幕上一行的字符数 我想换句话说 我正在尝试获取文本视图的列数 我考虑过根据文本大小和宽度进行手动计算 但是1 不知道相关性 2 由于填充以d
  • 如何更准确地绘制图表?

    我有一个数据集 其中包含1440 rows 297 columns 我试图绘制03 jan 2018就时间 X 轴 和密度 Y 轴 而言 但我遇到了一个问题 结果图不够清晰 X轴也没有出现 我想做像这样的东西 https i stack i
  • 如何拦截所有 Nancy 请求

    我看过这个帖子 南希 如何捕获所有请求 无论动词或路径如何 https stackoverflow com questions 17591494 nancy how do i capture all requests irrespectiv
  • Backbone.js - 从集合创建中获取 id

    我正在使用以下方法将模型添加到集合中create方法和 api 响应良好 模型似乎已正确返回并查看console dir resp 这就是我一直在寻找的东西 但是 当我尝试访问时runningorderid 哪一个是id定义为idAttri
  • jQuery 函数语法差异

    如何 function code jQuery 与 不同 document ready function 在jquery中 我知道什么是ready函数确实如此 它会等待 HTML 加载完毕后再开始 然而 确实 function 照着做 我知
  • 从远程 Git 存储库中删除所有文件和历史记录,而不删除存储库本身

    如果有人能告诉我如何删除 git 存储库上的每个文件 文件夹而不实际删除存储库本身 我将不胜感激 我也想删除与这些文件相关的所有历史记录 正如我所解释的这个答案 https stackoverflow com questions 18112
  • 将图像文件保存到临时目录

    我有一个名为 Image png 的图像文件 它保存在我的主包中 位于项目导航器层次结构中的 ViewController swift 文件旁边 我想将此图像的副本保存到临时目录 我以前没有做过 请问我可以使用什么代码 像这样的事情应该可以
  • scrapy 不打印异常的堆栈跟踪

    是否有一种特殊的机制来强制 scrapy 打印出所有 python 异常 堆栈跟踪 我犯了一个简单的错误 错误地获取了列表属性 导致 AttributeError 没有在日志中完整显示 出现的是 2015 11 15 22 13 50 sc
  • LinqKit 谓词生成器抛出 TypeLoadException?

    我在尝试执行使用 PredicateBuilder 动态构建的查询时遇到问题 我能够构建查询 但是在执行查询本身时 我得到以下 TypeLoadException 运行时 return context SearchRecords AsExp
  • 在Python中使用libclang解析C++

    经过一些研究和几个问题后 我最终探索了libclang https pypi python org pypi clang 3 5库以便在 Python 中解析 C 源文件 给定一个 C 源代码 int fac int n return n
  • 没有模板参数的模板类的容器

    我想知道您是否可以拥有一个包含具有不同模板参数的对象的容器 我正在努力实现这样的目标 include
  • 单击时发生指针事件,但滚动时不发生指针事件

    是否可以允许单击但不允许滚动事件 pointer events none 将禁用两种类型的输入 我想仅禁用滚动 还有其他解决方法的想法吗 添加这个CSS stopScroll height 100 overflow hidden 然后在 j
  • 如何判断线段是否在多边形内部?

    我们有一个线段L由两点定义从多边形和一个多边形P由 4 个或更多点定义 我需要一个算法来确定是否L在里面P 编辑 线段必须完全位于多边形内部 如果仅部分位于多边形内部 则将其定义为外部 例如看下图 再举几个例子 Step 1 L 是否穿过
  • 关于 addBatch(String) 的注意事项

    旁边的addBatch 的方法PreparedStatement还有一个addBatch String 方法中的Statement class 我想处理一系列不同的 sql 语句 并且正在寻找有关 addBatch String 性能方面含
  • id 为“xxxx”的进程未在 Visual Studio 中运行(包括 2013 至 2017~ 版本)

    我无法从 Visual Studio 2013 运行任何应用程序 它会抛出 ID 为 xxxx 的进程未运行消息 我也用过 Telerik 我尝试了互联网上的所有解决方案 除了重新安装 Visual Studio 但没有任何帮助 请帮助 谢
  • 如何在 Java 中复制 PostgreSQL 的 uuid_generate_v3()?

    PostgreSQL create extension if not exists uuid ossp select uuid generate v3 uuid nil this is a test uuid generate v3 e1e