如何将存储在DB中的java UUID作为二进制文件取回

时间:2017-12-11 11:14:26

标签: java mysql database string jdbc

我们有一个Java UUID字段,在以下转换后以二进制字节存储在数据库(MySQL)中

private byte[] getUUIDtoBytes(UUID devId) {
    byte[] uuidBytes = new byte[16];
    ByteBuffer.wrap(uuidBytes)
            .order(ByteOrder.BIG_ENDIAN)
            .putLong(devId.getMostSignificantBits())
            .putLong(devId.getLeastSignificantBits());
    return uuidBytes;

使用resultSet.getBytes从DB检索后,字节数组按以下方式转换回UUID

private UUID toUUID(byte[] bytes) {
    ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
    Long high = byteBuffer.getLong();
    Long low = byteBuffer.getLong();

    return new UUID(high, low);
}

这个工作正常,直到现在我必须在生产中找到一行的UUID字段。显示记录的应用程序可能使用getText或getString来显示字节数组,只需获取结果字符串的字节数组(使用UTF-8)并应用我的toUUID方法,我就无法获取记录的UUID值:(

不幸的是,我们服务的所有检索端点都需要此UUID字段。我是否可以提示如何使用该字节数组的字符串格式,并将其转换回原始UUID?

1 个答案:

答案 0 :(得分:0)

我认为您可以通过UUID方法将您的UUID字符串转换为真正的UUID#fromString()对象。然后,您可以比较两个UUID的最低和最高有效位字段:

boolean UUIDIsEqual(UUID one, String twoInput) {
    UUID two = UUID.fromString(twoInput);
    if (one.getLeastSignificantBits() == two.getLeastSignificantBits() &&
        one.getMostSignificantBits() == two.getMostSignificantBits()) {
        return true;
    }

    return false;
}

如果您没有使用UUID作为参考,那么您可以使用已经拥有的toUUID()方法将字符串转换为UUID。

按照以下链接获取演示,该演示显示UUID转换的字符串有效并且在逻辑上是正确的:

Demo