如何在java中将UUID保存为二进制(16)

2024-01-03

我有一个表 TestTable,其列 ID 为 binary(16),名称为 varchar(50)

我一直在尝试将有序的 UUID 存储为 PK,就像本文中一样以优化的方式存储 UUID https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/

我看到 UUID 以十六进制(blob)形式保存在数据库中

所以我想从 java 保存这个 ID 但我收到这个错误

数据截断:对于第 1 行的“ID”列来说数据太长

我目前正在使用 sql2o 库与 mysql 交互

所以基本上这是我的代码

String suuid = UUID.randomUUID().toString();
String partial_id = suuid.substring(14,18) + suuid.substring(9, 13) + suuid.substring(0, 8) + suuid.substring(19, 23) + suuid.substring(24)
String final_id = String.format("%040x", new BigInteger(1, partial_id.getBytes()));
con.createQuery("INSERT INTO TestTable(ID, Name) VALUES(:id, :name)")
        .addParameter("id", final_id)
        .addParameter("name", "test1").executeUpdate();

部分 id 应该是这样的11d8eebc58e0a7d796690800200c9a66

我在mysql中尝试了这个语句没有问题

insert into testtable(id, name) values(UNHEX(CONCAT(SUBSTR(uuid(), 15, 4),SUBSTR(uuid(), 10, 4),SUBSTR(uuid(), 1, 8),SUBSTR(uuid(), 20, 4),SUBSTR(uuid(), 25))), 'Test2');

但是当我删除 unhex 函数时,我遇到了同样的错误。那么如何将正确的ID从Java发送到mysql呢?

UPDATE

我根据答案解决了我的问题大卫·埃尔曼 https://stackoverflow.com/a/40297651/2532403。但就我而言,我使用 tomcat 中的 HexUtils 将排序后的 UUID 字符串转换为 bytes[]:

byte[] final_id = HexUtils.fromHexString(partial_id);

尝试将其存储为字节:

UUID uuid = UUID.randomUUID();
byte[] uuidBytes = new byte[16];
ByteBuffer.wrap(uuidBytes)
        .order(ByteOrder.BIG_ENDIAN)
        .putLong(uuid.getMostSignificantBits())
        .putLong(uuid.getLeastSignificantBits());

con.createQuery("INSERT INTO TestTable(ID, Name) VALUES(:id, :name)")
    .addParameter("id", uuidBytes)
    .addParameter("name", "test1").executeUpdate();

一点解释:您的表使用 BINARY(16),因此将 UUID 序列化为其原始字节是一种非常简单的方法。 UUID 本质上是带有一些保留位的 128 位整数,因此此代码将其写为大端 128 位整数。 ByteBuffer 只是将两个 long 转换为字节数组的简单方法。

现在在实践中,所有的转换工作和麻烦都不值得您为每行节省 20 个字节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在java中将UUID保存为二进制(16) 的相关文章

  • Java:BufferedReader readLine() 中的 IOEXception 有何用途?

    我可以使用 try catch 循环 修复 以下异常 但我无法理解原因 为什么 in readLine 部分会不断引发IOExceptions 抛出此类异常的真正目的是什么 目标可能不仅仅是更多副作用 代码和 IOException jav
  • 在 Java 和 C 中在运行时调用名为“string”的方法

    我们如何调用名称为的方法string在运行时 谁能告诉我如何在 Java 和 C 中做到这一点 在java中可以通过反射api来完成 看一下Class getMethod String methodName Class parameterT
  • Spring 可以理解 @Inject 替换 Weld 作为 JSR-299 实现吗?

    我从几个网页中注意到 Spring 3 0 显然支持来自 JSR 330 的 Inject 由于我们确实希望在 Web 应用程序和独立应用程序的库中使用 JSR 299 语法进行依赖项注入 并且有 Weld 的替代方案 因此如果 Sprin
  • 判断是否存在多对多记录组合

    这似乎是一个常见的任务 有一个简单的解决方案 但我在 StackOverflow 和 Google 上都空手而归 场景是这样的 我有两个共享多对多关系的表 A 和 B 因此 我有一个带有外键的表 A B 它映射 A 到 B 记录关系 标准的
  • com.google.gwt.dev.jjs.InternalCompilerException:访问期间出现意外错误

    我在使用版本 2 6 0 编译 gwt 应用程序时遇到以下错误 最初我用 gwt 版本 2 6 1 的 maven 编译它 然后尝试通过版本 2 6 0 的 eclipse 编译它 跟版本兼容有关系吗 com google gwt dev
  • 使用java在mysql中插入带有\\的文件路径

    我正在使用java制作一个独立的应用程序 并且我需要插入用户从文件选择器中选择的图像的路径 我正在获取文件的路径 但是当我将其存储在数据库 mysql 中时 它不会存储 所以当我检索该路径时 该文件不会显示 如何存储文件的路径 这样就可以使
  • 全屏独占模式下的 AWT 框架在窗口弹出对话框中最小化

    我正在开发一个在全屏独占模式下使用 awt 框架的应用程序 一切正常 直到弹出窗口可见 这会抢走焦点 我的应用程序将被最小化 这是我的框架的初始化代码 if ApplicationConfig getInstance useFullscre
  • 在 Eclipse 中导航 Java 调用堆栈

    在调试器中像GDB http sources redhat com gdb 当您在断点处停止时 您可以轻松地向上移动调用堆栈并检查相关的源和堆栈帧数据 在 Eclipse 中如何做到这一点 In the 调试视角 http www ibm
  • binary_log_types.h:没有这样的文件或目录

    我正在编译一个小型 mysql C 项目并且 遇到以下错误 C Program Files x86 MySQL MySQL Server 5 7 include mysql com h 22 30 fatal error binary lo
  • 搜索多个表 (SQL)

    我需要能够有一个 SQL 查询来使用简单的搜索来搜索我的数据库 这是我的表格现在的样子 Table artists id name Table albums id artistID name Table songs id albumID n
  • Python MySQL 模块

    我正在开发一个需要与 MySQL 数据库交互的 Web 应用程序 但我似乎找不到任何真正适合 Python 的模块 我特别寻找快速模块 能够处理数十万个连接 和查询 所有这些都在短时间内完成 而不会对速度产生重大影响 我想我的答案将是游戏领
  • 错误:SQLSTATE[HY000] [2002] 无法建立连接,因为目标计算机主动拒绝连接

    当我调试代码时突然发生错误 它有一系列关于数据库连接的错误 ERROR SQLSTATE HY000 2002 No connection could be made because the target machine actively
  • 在java中将jpeg/png转换为像素数组

    如何将包含 jpeg 或 png 的字符串转换为像素数组 最好是一维 理想情况下使用java内置的类 原来你需要公共文件上传 http commons apache org fileupload 看着那 这用户指南 http commons
  • 摆动刷新周期

    我试图了解何时使用重新验证 重绘 打包 令人惊讶的是 我没有找到详细的底层文档 请随意链接 到目前为止我已经明白这都是 RepaintManager 的责任 油漆 重新油漆指的是脏 干净的东西 pack validate revalidat
  • 如何从 REstAssured 中的 Json 数组获取 JSON 对象

    任何人都可以帮我解决这个场景 我是新来的RestAssured和处理JSON在我们的自动化脚本中 我有一个API谁的回应是JSONArray i e id 1002 entity testcase fieldName TextName di
  • PDO 连接字符串:最好的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想使用 php pdo 制作一个后端应用程序 我发现了很多不同的方法来处理 PDO 连接字符串 我想知道使用 pdo 执行连接字符串的最佳方法
  • 使用JPanel绘制直线并获取点坐标

    我现在完全不知所措 我没有太多用 Java 构建 GUI 我一直在阅读有关 swing 和 JPanel 的所有内容 我认为我想做的事情是可能的 我只是还没有弄清楚how 我正在尝试构建一个 GUI 您可以在其中在某个绘图区域内绘制直线 我
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • 如何避免连续“重置偏移量”和“寻找最新偏移量”?

    我正在尝试遵循本指南 https spark apache org docs latest structed streaming kafka integration html https spark apache org docs late
  • 在私有 guice 模块中公开 Map

    我在 guice 中有一个 PrivateModule 我想从该模块公开一个 Map public class TestInjectionModule extends PrivateModule expose Map class annoa

随机推荐

  • 如何使用 AsyncHttpClient Android 上传多个文件

    我知道我可以从 AsyncHttpClient 上传单个文件 http loopj com android async http http loopj com android async http File myFile new File
  • 多容器docker(AW​​S)链接是单向的吗?

    我通过 AWS 上的多容器 docker 获得了非对称容器可发现性 也就是说 第一个容器可以找到第二个容器 但第二个容器找不到第一个容器 我在 AWS Elastic Beanstalk 上进行了多容器 Docker 部署 两个容器都使用相
  • 在返回“send_file”的烧瓶函数中,代码似乎不会在后续请求上运行,但文件仍然会下载。为什么?

    我正在使用具有以下路线的 Flask 代码 app route download def download file path certificate docx print certificate printed print os getc
  • 从 php stdin 保存大文件

    请告诉我从 php stdin 保存大文件的最佳方法 iOS 开发人员向我发送大型视频内容到服务器 我必须将其存储到文件中 我读取带有视频数据的标准输入线程并将其写入文件 例如 这样 handle fopen php input rb wh
  • JPlayer Circle Player 第一次使用 vox 制作的 wav 文件时不显示圆圈

    我有一个应用程序 它使用 JPlayer Circle Player 播放短音频以进行转录 这些音频均源自 vox 文件 已由 SoX 转换为 wav 按下 播放 按钮时 将播放音频 但不显示绿色圆圈 剪辑播放后 再次按播放确实会显示绿色圆
  • 为什么这个 std::vector 会给出运行时错误?

    vector
  • .NET:关于 AssemblyVersion,什么定义了二进制兼容性?

    对强命名程序集的哪些更改需要更改 AssemblyVersionAttribute 显然 以可能要求客户端必须更改代码的方式更改公共 api 需要增加 AssemblyVersion 但是 如果对公共 API 进行更改而不需要在客户端中更改
  • C 中的类型双关和联合

    我目前正在开发一个项目来构建一个小型编译器 只是为了它 我决定采用构建一个极其简单的虚拟机作为目标的方法 这样我就不必担心学习 elf intel 汇编等的细节 我的问题是关于 C 中使用联合的类型双关 我决定在虚拟机内存中仅支持 32 位
  • MongoDB嵌套对象聚合计数

    我有一个高度嵌套的 mongoDB 对象集 我想计算与给定条件匹配的子文档的数量编辑 在每个文档中 例如 id chr 20 pos 14371 ref A alt G studies study id Study1 samples sam
  • RuntimeError:DataLoader 工作线程意外退出

    我是 PyTorch 和机器学习的新手 所以我尝试按照这里的教程进行操作 https medium com nutanbhogendrasharma pytorch 卷积神经网络 with mnist dataset 4e8a4265e11
  • 使用 Emscripten 将 R 函数编译为 JavaScript

    我正在尝试使用 Emscripten 将一些用 C 编写的 R 函数编译为 JavaScript 我的第一个任务是移植一个名为pf 源码可以找到here https github com wch r source blob trunk sr
  • PHP:递归地将目录中的所有文件重命名为小写

    我需要帮助 我想递归地将目录中的所有文件重命名为小写 我有一个代码要测试 但它仅在该文件夹内重命名 而不是递归地重命名 我怎样才能让它递归地执行呢 这是我使用的代码 您可以使用 SPL递归目录迭代器 http docs php net ma
  • 不同组的 dplyr 滞后

    我正在尝试使用 dplyr 来改变包含变量的同一组滞后的列以及其他组 之一 的滞后 编辑 抱歉 在第一版中 我在最后一秒按日期重新排列 有点搞乱了顺序 这就是我想要的结果 Here is a minimal code example lib
  • Django - 复制具有 2 个嵌套外键的模型实例

    我是 django 新手 我有一个调查应用程序 其中管理员创建有问题的调查 问题有选择 我已将 save as True 添加到我的调查管理员中 但是当我复制调查时 问题是存在于副本中 但不存在选择 class SurveyAdmin ad
  • Pandas 列数学运算 无错误无答案

    我正在尝试对文件执行一些简单的数学运算 下面的列file 1 csv本质上是动态的 列的数量会不时增加 所以我们无法修复last column master ids csv 在任何预处理之前 Ids ref0 the columns inc
  • CMake编译时生成源代码

    我在使用CMake时遇到以下情况 它必须构建两个应用程序 a 发电机 b 其他的东西 The 发电机没什么花哨的 几个 CPP 文件链接在一起 The 其他的东西 is A 一些 正常 CPP 文件 b 生成的 CPP h 文件 我必须链接
  • VS Code / Metals:如何使用远程调试器调试 Scala sbt 项目?

    我知道这个问题之前已经以某种形式被问过here https stackoverflow com questions 60495320 how to debug scala sbt project in vs code 但我根本不知道如何在
  • Rails 找不到 rake gem

    我有一个在 docker 中运行的基本 Rails 应用程序 我可以很好地启动它并提供响应 我可以跑rake T正好 但我无法运行 Rails 生成命令 它无法告诉我Could not find rake 12 3 1 in any of
  • CSS - 缩进列表项

    有没有办法使用 CSS 来缩进每个列表项 所以一个正常的列表 ul li One li li Two li li Three li li Four li ul 显示如下 One Two Three Four 在这里你可以使用 before具
  • 如何在java中将UUID保存为二进制(16)

    我有一个表 TestTable 其列 ID 为 binary 16 名称为 varchar 50 我一直在尝试将有序的 UUID 存储为 PK 就像本文中一样以优化的方式存储 UUID https www percona com blog