我应该如何将UUID与JavaDB / Derby和JDBC一起使用?

时间:2010-10-17 18:33:33

标签: jdbc types uuid derby javadb

我目前使用INT作为JavaDB(Apache Derby)中主键的类型,但由于我正在实现分布式系统,我想将类型更改为java.util.UUID。关于这个的一些问题:

  • 我应该将JavaDB / Derby中的哪种数据类型用于UUID?我已经看到CHAR(16) FOR BIT DATA已被提及,但我对此并不了解。 VARCHAR(16)是另类吗?

  • 我应该如何在JDBC中使用它?例如。在PreparedStatement中,我该如何设置和获取UUID?

  • 如果我以后想将数据库更改为SQL Server,是否存在与java.util.UUID兼容的数据类型?

简单地说,我应该如何将UUID与JavaDB / Derby和JDBC一起使用?

3 个答案:

答案 0 :(得分:10)

UUID是128位值。 CHAR(16) FOR BIT DATA类型反映了它是以字符形式存储的位数据,以简洁。我不认为VARCHAR(16)会起作用,因为它没有位标志。数据库必须能够将二进制数据转换为处理编码的字符数据并且存在风险。更重要的是,它不会给你买任何东西。由于UUID 总是 128位,因此使用VARCHAR而不是CHAR可以节省空间。所以你不妨使用预期的CHAR(16) FOR BIT DATA

使用JDBC,我认为你使用get / setBytes()方法,因为它处理少量的二进制数据。 (不是肯定的,必须尝试这个)

不知道SQL Server部分。

答案 1 :(得分:3)

如果您仍想在代码中使用UUID对象,可以使用fromString从DB和toString创建UUID对象,以将它们存储在数据库中。

答案 2 :(得分:-4)

您可以将UUID转换为字符串并将其存储为VARCHAR。大多数UUID字符串格式与此类似:32个数字用连字符分隔:00000000-0000-0000-0000-000000000000,那么你想要一个VARCHAR(36),或者如果你愿意的话就像VARCHAR(64)那样,因为你的VARCHAR中有额外的“空间”没有坏处 - 只存储实际的数字。

将它转换为字符串后,只需调用Statement.SetString将其包含在INSERT语句中即可。